Запрос для вывода новостей.

GeT

Новичок
Запрос для вывода новостей.

Есть 3 таблицы:
news - тут хранится текст новости, id автора и т.д.
users - тут для каждому id соответствует username
comments - тут содержится текст комментов, id автора и тип комментария (там коменты для статей, новостей и т.п.)

Для вывода новости я составляю такой запрос:
[SQL]
SELECT t1.id, t1.title, t1.date, t1.time, t1.image, t1.body, t1.authorid, t3.username author, COUNT( t2.id ) noc FROM news t1
LEFT JOIN comments t2 ON t2.cid = t1.id
LEFT JOIN users t3 ON t3.id=t1.authorid
WHERE t2.cat='news' AND t1.id=39
GROUP BY t2.cid,t2.cat
[/SQL]
В этому случае, если у новости нет комментариев, она не выведется.
Пробовал такой вариант:
[SQL]
SELECT t1.id, t1.title, t1.date, t1.time, t1.image, t1.body, t1.authorid, t3.username author, COUNT( t2.id ) noc FROM news t1
LEFT JOIN comments t2 ON t2.cid = t1.id
LEFT JOIN users t3 ON t3.id=t1.authorid
WHERE IF(noc,t2.cat='news',1) AND t1.id=39
GROUP BY t2.cid,t2.cat
[/SQL]
Но он не работает.
[SQL]
SELECT t1.id, t1.title, t1.date, t1.time, t1.image, t1.body, t1.authorid, t3.username author, COUNT( t2.id ) noc FROM news t1
LEFT JOIN comments t2 ON t2.cid = t1.id
LEFT JOIN users t3 ON t3.id=t1.authorid
WHERE (t2.cat='news' OR 1) AND t1.id=39
GROUP BY t2.cid,t2.cat
[/SQL]
Вот этот работает, НО, тут выводится 2 раза новость (потому что существуют комментарии типа "news" и комментарии типа "article"

-~{}~ 12.03.05 15:49:

P.S. не советуйте, плиз, всякие мануалы типа http://dev.mysql.com/doc
http://phpfaq.ru
http://detail.phpclub.net/article/2000-12-05
Я их все читал. Думаю, просто ошибся где-то

-~{}~ 12.03.05 17:13:

И еще, вариант разделения таблицы комменты на несколько таблиц мне не подходит тоже, т.к. структура динамическая и могут быть добавлены новые типы комментариев.
 

SNiP

Новичок
В первом варианте запроса, вот это условие t2.cat = 'news' перенесите из секции where в секцию условия объединения таблиц новости и комментарии, т.е. в ON
 

GeT

Новичок
SNiP
Спасибо! Выручил
Я чето совсем туплю, не догадался =)))

-~{}~ 13.03.05 13:36:

Так. Теперь то же самое с выводом ленты новостей.
[SQL]
SELECT t1.id, t1.title, t1.date, t1.time, t1.image, t1.body, t1.authorid, t3.username author, COUNT( t2.id ) noc
FROM news t1
LEFT JOIN comments t2 ON t2.cid = t1.id AND t2.cat = 'news'
LEFT JOIN users t3 ON t3.id = t1.authorid
GROUP BY t2.cid, t2.cat
ORDER BY t1.id
LIMIT 10
[/SQL]

Всего 8 новостей, а он выводит 5...

-~{}~ 13.03.05 13:40:

При том что новость с id=39 выводится по запросу
[SQL]
SELECT t1.id, t1.title, t1.date, t1.time, t1.image, t1.body, t1.authorid, t3.username author, COUNT( t2.id ) noc
FROM news t1
LEFT JOIN comments t2 ON t2.cid = t1.id AND t2.cat = 'news'
LEFT JOIN users t3 ON t3.id = t1.authorid
WHERE t1.id=39
GROUP BY t2.cid, t2.cat
[/SQL]
она не выводится в общем списке, хотя id у нее самый большой.

-~{}~ 13.03.05 23:36:

Нет идей?
 

SNiP

Новичок
Если я правильно понял, то:
t1.id - id новости
t2.cid - id новости
t2.id - id комментария
и если это так, то попробуй GROUP BY t1.id и без t2.cid, t2.cat в общем группируй по id новости из таблицы новости. Просто вероятно, что при отстутствии комментариев к заметке t2.cid будет NULL и в результате новости без комментариев группируются.
 

GeT

Новичок
SNiP
Спасибо огромное!
Все работает, удивляюсь, как я сам не допер =)))
 
Сверху