Сами вопросы отдельно из базы не выбираются, формируется сразу вся страница категории, поэтому количество комментариев к каждому вопросу понятными средствами вычислить довольно затруднительно.
Сейчас у меня это сделано через цикл:
FOR($e=0;$e<=$rows-1;$e++) { $sql = "SELECT * FROM cms_comments WHERE target = 'anec' AND target_id = ".$quests[$e]['id'].";"; $result = $inDB->query($sql) ; $rows2 = $inDB->num_rows($result); $quests[$e]['comments_vote']=$rows2; }
Но возникло некоторое затруднение. При поиске в лефтджойненой таблице с каментами вывод самих вопросов начинает дублироваться. Сколько у вопроса каментов — столько сделает дублей вопроса.
$sql = "SELECT q.*, c.title cat_title, c.id cid, u.login, u.nickname, r.item_id rid, m.id comm FROM cms_anec_quests q LEFT JOIN cms_faq_cats c ON c.id = q.category_id LEFT JOIN cms_comments m ON m.target_id = q.id AND m.target = 'faq' LEFT JOIN cms_ratings r ON r.item_id = q.id AND r.target = 'quest' AND r.user_id = {$inUser->id} LEFT JOIN cms_users u ON u.id = q.user_id WHERE q.published = 1 ORDER BY q.pubdate DESC LIMIT 15";
$sql = "SELECT q.*, c.title cat_title, c.id cid, u.login, u.nickname, r.item_id rid, COUNT(m.id) comm FROM cms_anec_quests q LEFT JOIN cms_faq_cats c ON c.id = q.category_id LEFT JOIN cms_comments m ON m.target_id = q.id AND m.target = 'faq' LEFT JOIN cms_ratings r ON r.item_id = q.id AND r.target = 'quest' AND r.user_id = {$inUser->id} LEFT JOIN cms_users u ON u.id = q.user_id WHERE q.published = 1 ORDER BY q.pubdate DESC LIMIT 15";
То есть запрос вытряхивает все каменты к вопросам из базы.
Может кто подскажет, как организовать вывод счетчика по правильному?
____________________________________________________________
В общем, заработало с GROUP BY
$sql = "SELECT q.*, c.title cat_title, c.id cid, u.login, u.nickname, COUNT(m.target_id) comm FROM cms_faq_quests q LEFT JOIN cms_faq_cats c ON c.id = q.category_id LEFT JOIN cms_users u ON u.id = q.user_id LEFT JOIN cms_comments m ON m.target_id = q.id WHERE q.published = 1 GROUP BY m.target_id ORDER BY q.pubdate DESC LIMIT ".(($page-1)*$perpage).", $perpage";
Видимо придется оставить цикл…