[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Подсчитать комментарии
Unlikely
Хочется подсчитывать количество коментов. Есть запрос
SELECT COUNT(*) FROM `comments` WHERE `post` = '1'

Не пойму, неужели придётся выполнять запрос в цикле?



Спустя 1 минута, 22 секунды (24.05.2010 - 13:22) Kuliev написал(а):
GROUP BY

Спустя 49 минут, 35 секунд (24.05.2010 - 14:11) Unlikely написал(а):
Что то не получается разобраться как это работает...
У меня
= '1'

должно меняться 1,2,3,4,5 и тд.

Спустя 10 минут, 33 секунды (24.05.2010 - 14:22) Unlikely написал(а):
Я так понимаю должно получиться примерно следующее
SELECT COUNT(*) FROM `comments` GROUP BY `post`


Спустя 5 минут, 59 секунд (24.05.2010 - 14:28) vagrand написал(а):
Цитата
SELECT COUNT(*) FROM `comments` GROUP BY `post`


Это не верный подход к делу. Верным будет добавить в таблицу с постами поле comments_count и изменять его значение при изменении количества коментов.
В этом случае не нужно будет дополнительных запросов, при чем очень не легких.

Спустя 10 минут, 33 секунды (24.05.2010 - 14:38) waldicom написал(а):
Цитата (vagrand @ 24.05.2010 - 13:28)
Цитата
SELECT COUNT(*) FROM `comments` GROUP BY `post`


Это не верный подход к делу. Верным будет добавить в таблицу с постами поле comments_count и изменять его значение при изменении количества коментов.
В этом случае не нужно будет дополнительных запросов, при чем очень не легких.

Способ хороший, но не самый "устойчивый". Если кто-то добавит коммент в обход функции дополнения, то количество комментариев будет показываться с ошибками.

Спустя 2 минуты, 59 секунд (24.05.2010 - 14:41) zarafar написал(а):
Цитата (waldicom @ 24.05.2010 - 11:38)
Цитата (vagrand @ 24.05.2010 - 13:28)
Цитата
SELECT COUNT(*) FROM `comments` GROUP BY `post`


Это не верный подход к делу. Верным будет добавить в таблицу с постами поле comments_count и изменять его значение при изменении количества коментов.
В этом случае не нужно будет дополнительных запросов, при чем очень не легких.

Способ хороший, но не самый "устойчивый". Если кто-то добавит коммент в обход функции дополнения, то количество комментариев будет показываться с ошибками.

Вконтакте есть интересная кнопка в настройках "Пересчитать показатели", они так решили эту проблему smile.gif

Спустя 2 минуты, 46 секунд (24.05.2010 - 14:44) Unlikely написал(а):
Цитата (vagrand @ 24.05.2010 - 11:28)
Цитата
SELECT COUNT(*) FROM `comments` GROUP BY `post`


Это не верный подход к делу. Верным будет добавить в таблицу с постами поле comments_count и изменять его значение при изменении количества коментов.
В этом случае не нужно будет дополнительных запросов, при чем очень не легких.

И править это значение во всех строках? blink.gif

Спустя 5 минут, 10 секунд (24.05.2010 - 14:49) waldicom написал(а):
Цитата (zarafar @ 24.05.2010 - 13:41)
Вконтакте есть интересная кнопка в настройках "Пересчитать показатели", они так решили эту проблему smile.gif

Точно также эту проблемы решили создатели булки (vBulletin)

Спустя 17 минут, 11 секунд (24.05.2010 - 15:07) vagrand написал(а):
Цитата
Способ хороший, но не самый "устойчивый". Если кто-то добавит коммент в обход функции дополнения, то количество комментариев будет показываться с ошибками.


Ну знаешь, если допускать что в БД могут вносится изменения в обход функционала, то много чего можно на фантазировать + если при таком подходе получаются расхождения между количеством и фактическими коментами, то надо править ошибку в функционале а не добавлять запросы с группировками.

Спустя 4 минуты, 55 секунд (24.05.2010 - 15:11) waldicom написал(а):
Цитата (vagrand @ 24.05.2010 - 14:07)
если допускать что в БД могут вносится изменения в обход функционала, то много чего можно на фантазировать

Каждый решает сам, как ему работать... Думать о том, что конечный пользователь сделает именно то, чего не предусмотрел программист или представлять себе пользователя эдаким билгейтсомилинусомторвальдсем в одно лице.

Спустя 23 минуты, 12 секунд (24.05.2010 - 15:35) Unlikely написал(а):
Хм. Всё просто

$comments_count = mysql_query("SELECT post, COUNT( post ) FROM `comments` GROUP BY `post`", $connection);
while($comments = mysql_fetch_assoc($comments_count)) {
echo "<pre>";
print_r($comments);
echo "</pre>";
}


Вывод:

Array
(
[post] => 1
[COUNT( post )] => 2
)

Array
(
[post] => 3
[COUNT( post )] => 1
)

Спустя 1 час, 25 минут, 30 секунд (24.05.2010 - 17:00) Unlikely написал(а):
Блин, теперь возникла небольшая проблема.

Нужно составить массив, где ключами были бы $comments['post'] а значениями $comments['COUNT( post )'].

Так,

while($comments = mysql_fetch_assoc($comments_count)) {
$comments_arr = array($comments['post'] => $comments['COUNT( post )']);
}

Ключ и значение просто перезаписывается...

Спустя 37 минут, 35 секунд (24.05.2010 - 17:38) Unlikely написал(а):
$comments_arr[$comments['post']] = $comments['COUNT( post )'];

Спустя 42 минуты, 18 секунд (24.05.2010 - 18:20) Unlikely написал(а):
Конечный результат получился у меня таким:

$comments_count_query = mysql_query("SELECT post, COUNT( post ) FROM `comments` WHERE `visible` = '1' GROUP BY `post`", $connection);
while($comments_count_result = mysql_fetch_assoc($comments_count_query)) {
$comments_count[$comments_count_result['post']] = $comments_count_result['COUNT( post )'];
}

if(!isset($comments_count[$id])) {
echo "0";
}

else {
if(isset($comments_count[$id])) {
echo $comments_count[$id];
}
}


Спустя 21 минута, 59 секунд (24.05.2010 - 18:42) Unlikely написал(а):
Только вот я не совсем уверен, что всё правильно сделал.
Прокомментируйте пожалуйста, если что то не так. Может быть нужно что подправить...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.