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,2,3,4,5 и тд.
У меня
= '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) | ||
Это не верный подход к делу. Верным будет добавить в таблицу с постами поле comments_count и изменять его значение при изменении количества коментов. В этом случае не нужно будет дополнительных запросов, при чем очень не легких. |
Способ хороший, но не самый "устойчивый". Если кто-то добавит коммент в обход функции дополнения, то количество комментариев будет показываться с ошибками.
Спустя 2 минуты, 59 секунд (24.05.2010 - 14:41) zarafar написал(а):
Цитата (waldicom @ 24.05.2010 - 11:38) | ||||
Способ хороший, но не самый "устойчивый". Если кто-то добавит коммент в обход функции дополнения, то количество комментариев будет показываться с ошибками. |
Вконтакте есть интересная кнопка в настройках "Пересчитать показатели", они так решили эту проблему
Спустя 2 минуты, 46 секунд (24.05.2010 - 14:44) Unlikely написал(а):
Цитата (vagrand @ 24.05.2010 - 11:28) | ||
Это не верный подход к делу. Верным будет добавить в таблицу с постами поле comments_count и изменять его значение при изменении количества коментов. В этом случае не нужно будет дополнительных запросов, при чем очень не легких. |
И править это значение во всех строках?
Спустя 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 )'].
Так,
Ключ и значение просто перезаписывается...
Нужно составить массив, где ключами были бы $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 написал(а):
Только вот я не совсем уверен, что всё правильно сделал.
Прокомментируйте пожалуйста, если что то не так. Может быть нужно что подправить...
Прокомментируйте пожалуйста, если что то не так. Может быть нужно что подправить...