Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Помогите обуздать left join в mysql (Вадим) 30/07/2006 - 15:51:48
      Re: Помогите обуздать left join в mysql (Вадим) 30/07/2006 - 17:54:18

> Original message text:
> From: Вадим - 30/07/2006 - 15:51:48
> Subject:Помогите обуздать left join в mysql
> -----------------
> Есть две таблицы форума phpBB - phpmw_forums (список форумов) и
> phpmw_posts(инморация о каждом посте в форуме - к какой теме принадлежит, в
> какому форуму и т.д.).
>
> Составил три дополнительных таблицы (то, что не относится к делу, из них
> вырезал):
>
> create table phpmw_bt_export(
> # Содержимое каких форумов в каких ньюзгруппы или форумы экспортировать
> bte_forumid mediumint(8) not null,
> bte_groupid mediumint(8) not null,
> );
>
> create table phpmw_bt_groups(
> # Список ньюзгрупп и форумов для экспорта
> btg_id mediumint(8) not null auto_increment primary key,
> # напр., "its.video"
> btg_group varchar(100) not null,
> # Напр., "ints.news.pike"
> btg_host varchar(50) not null,
> );
>
> create table phpmw_bt_topics(
> # Для определения скриптом, в какие группы он уже запостил темы из нашего
> форума
> #btt_id mediumint(8) not null auto_increment primary key,
> btt_topicid mediumint(8) not null,
> btt_groupid mediumint(8) not null,
> # запощен ли уже пост ID=btt_gorupid в группу ID=btt_topicid ?
> btt_posted bool default '0'
> );
>
> btt_topicid ссылается на phpmw_posts.topic_id,
> brr_groupid на phpmw_bt_groups.btg_id,bte_groupid на phpmw_bt_groups.btg_id,
> bte_forumid на phpmw_forums.forum_id.
>
> Нужно сделать SELECT тех постов, которые ещё не постились. При этом,
> соответствующих записей в phpmw_bt_topics может и не быть !
>
> Запрос SELECT btg_group,p.topic_id from
> phpmw_forums as f,
> phpmw_bt_groups,phpmw_posts as p,phpmw_bt_export
> left join phpmw_bt_topics on btt_groupid=bte_groupid and btt.posted=0
> where (btt_topicid=p.topic_id or btt_topicid is null) and
> bte_forumid=f.forum_id and bte_groupid=btg_id and
> and p.forum_id=f.forum_id and p.topic_id=125 order by btg_id
>
> успешно работает в том случае, если в phpmw_bt_topics имеются соотв. записи,
> но спотыкается, если соответствующие данному топику (p.topic_id, тут он
> равен 125) записи не имеются в phpmw_topics.
>
> Как быть ?
>


From: Вадим - 30/07/2006 - 17:54:18
Subject:Помогите обуздать left join в mysql
-----------------
Уф... Вроде родил... Тьфу-тьфу, чтобы не оказалось, что он работает не
совсем так, как мне надо. :)

SELECT
btg.btg_group,ljg.btg_group,p.topic_id,f.forum_id,f.forum_name,t.post_subjec
t,
bt.size,t.post_text from phpmw_posts_text as t,
phpmw_bt_torrents as bt,phpmw_forums as f,
phpmw_bt_export,phpmw_bt_groups as btg,phpmw_posts as p
left join (phpmw_bt_topics as ljt,phpmw_bt_groups as ljg) on
(ljg.btg_enable=1 and ljt.btt_topicid=p.topic_id and
ljt.btt_groupid=ljg.btg_id and ljt.btt_posted=0)
where (ljg.btg_id is null or ljg.btg_id=btg.btg_id) and bte_enable=1
and bte_forumid=p.forum_id and bte_groupid=btg.btg_id and btg.btg_enable=1
and
t.post_id=bt.post_id and t.post_id=p.post_id and
p.forum_id=f.forum_id
and f.allow_dl_topic=1 and p.topic_id=152


Хорошо бы его упростить, но... хз как...


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
29298



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |