есть следующие таблички. fa_forums - название и описание веток форума. и fa_replies темы и ответы на форуме. Так вот задача нуно брать все по форуму, + количество тем на форуме + количество ответов получился у меня вот такой вот запрос Код (Text): select a.*, count(b.id) as count_top count(c.id) as count_post from fa_forums a LEFT JOIN fa_replies b ON b.forum_id=a.id AND b.parent<>0 LEFT JOIN fa_replies c ON c.forum_id=a.id AND c.parent=0 GROUP BY a.id,a.forum_name,a.restricted,a.from_level,a.for_dep,a.sort_id,a.description ORDER BY a.sort_id Но почему то отдаваемый результат count_top и count_post не правильный. Помогите разобратся с запросом.
если в таблице fa_replies вместо `parent` NOT NULL DEFAULT 0 использовать `parent` NULL, то можно было бы использовать следующий запрос: [sql]SELECT a.id, count(b.id) as count_replies, /* Количество сообщений в форуме */ count(a.id) as q, /* Неправильное количство сообщений */ count(b.parent) as count_answer, /* количество ответов */ count(a.id) - count(b.parent) as count_theme, /* количество тем в форуме */ FROM fa_forums as a LEFT JOIN fa_replies b ON b.forum_id=a.id GROUP BY a.id;[/sql]
Ну тогда совсем извращенный метод: [sql]SELECT a.id, count(CASE WHEN parent = 0 THEN NULL WHEN parent <> 0 THEN 1 END) as answer, count(CASE WHEN parent <> 0 THEN NULL WHEN parent = 0 THEN 1 END) as topic from fa_forums a LEFT JOIN fa_replies b ON b.forum_id=a.id GROUP BY a.id,a.forum_name,a.restricted,a.from_level,a.for_dep,a.sort_id,a.description ORDER BY a.sort_id;[/sql] Может имеет смысл два запроса?
Понимаешь ли . если делать два запроса то получается конструкция $запрос while(){ $запрос } и получится тогда 25 запросов на страницу .... 24 из которыъ запрос на коунт
чем плохо: [sql]SELECT count(b.id) as count_top FROM fa_forums a LEFT JOIN fa_replies b ON b.forum_id = a.id AND b.parent<>0 GROUP BY a.id,a.forum_name,a.restricted,a.from_level,a.for_dep,a.sort_id,a.description ORDER BY a.sort_id; SELECT count(b.id) as count_post FROM fa_forums a LEFT JOIN fa_replies b ON b.forum_id = a.id AND b.parent=0 GROUP BY a.id,a.forum_name,a.restricted,a.from_level,a.for_dep,a.sort_id,a.description ORDER BY a.sort_id; [/sql]