Посчитать количество комментариев для каждой фотки

regi

Новичок
Посчитать количество комментариев для каждой фотки

У меня есть две таблицы:

таблица gallery содержит два поля id и cid.
id - ид фотки, cid - ид раздела.

таблица comments содержит поля:
comm_id - идентификатор комментария
p_id - идентификатор фотки, к которой относится данный комментарий и есть еще пара полей, содержащих имя, сообщение и т.п.

человек, заходя в раздел, видит все фотки, относящиеся к данному разделу(уменьшенные естественно :) )
запрос типа "SELECT * FROM gallery WHERE cid='".$cid."' "
но мне еще необходимо для каждой фотки посчитать количество комментариев.

пока на ум приходит только что-то такое:
PHP:
$query = "SELECT * FROM gallery WHERE cid='".$cid."' ";
$result = mysql_query($query);
while($row = mysql_fetch_array($result)){
 $count_query = "SELECT COUNT(*) FROM comments WHERE p_id='".$row['id']."' ";
 $count_result = ......
//вывод фоток с количеством комментариев
};
Но мне не хочется делать по 15 запросов на странице. Хотя если Вы мне скажете, что это не скажется на быстродействии, оставлю так :) Вопрос в том, как это дело оптимизировать.
 

regi

Новичок
Автор оригинала: Andreika
GROUP BY p_id вместо WHERE и + в SELECT нужные поля
Я сделал вот такой запрос:
SELECT g.*, COUNT(c.p_id) AS counter FROM gallery AS g, comments AS c WHERE g.cid='".$cid."' AND c.p_id=g.id GROUP BY c.p_id

Проблема возникает, если в таблице comments отсутствую записи для данной фотки, т.е. данный запрос выводит только фотки с комментами.
 

vb

Новичок
Попробуйте так...
Код:
$result = mysql_query ("SELECT COUNT(c.comm_id) as count FROM gallery as g LEFT JOIN comments as c ON c.p_id=g.id WHERE g.cid='{$cid}' GROUP BY c.p_id ");
 

regi

Новичок
Если я правильно вас понимаю, этот запрос в принципе аналогичен моему. Работает так же, только не выбирает id из gallery.
SELECT COUNT(comments.c_id) AS counter FROM comments LEFT JOIN gallery ON comments.p_id=gallery.id WHERE gallery.cid='".$cid."' GROUP BY comments.p_id

Выбирает только фотки с комментариями.
 

Andreika

"PHP for nubies" reader
[sql]SELECT c.id, COUNT(a.id) FROM content AS c LEFT JOIN comments as a ON (c.id=a.contentid) GROUP BY c.id[/sql]
 

regi

Новичок
Большое спасибо вам.
запрос в итоге такой:
[SQL]
SELECT g.*, COUNT(c.p_id) AS counter FROM gallery AS g LEFT JOIN comments AS c ON (g.id = c.p_id) WHERE g.cid='".$cid."' GROUP BY g.id[/SQL]
Вроде бы работает :)
 
Сверху