Подсчет количества различных строк в MySQL


Я создаю систему комментариев с PHP / MySQL. Эта система комментариев имеет хорошую функцию, которая позволяет пользователям выделять текст (сохраненный как "selected_text" в базе данных), и этот выделенный текст будет сохранен в базе данных вместе с комментарием, сделанным пользователем. Кроме того, я также сохраняю абзац (из которого появился выделенный текст), как INT. Все эти значения правильно хранятся в базе данных, но теперь я хочу что-то с ними сделать.

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

Это представление структуры таблицы

Мой последний запрос, чтобы попытаться получить эту информацию:

$distinct = mysql_query("SELECT COUNT(DISTINCT paragraph_id) FROM comments");

И соответствующий PHP код:

while ($result_three = mysql_fetch_array($distinct)) 
{ 
    echo $result_three['paragraph_id'];
}

Теперь, я думаю, что я, возможно, иду об этом неправильно путь. Я рассматривал возможность запуска запроса, который сначала находит все DISTINCT paragraph_ids. После этого я бы запустил для каждого цикла, который подсчитывает количество раз, когда эти paragraph_ids появляются.

Запрос, с которым я сейчас работаю, похоже, не достигает моей цели. Кроме того, я обеспокоен тем, что для меня нет четкого способа четко прикрепить подсчитанные данные к счетчику комментариев."
4 5

4 ответа:

В основном, вам нужно подсчитать комментарии в каждой группе идентификаторов абзацев. Правильный запрос приведен ниже:

$distinct = mysql_query("SELECT paragraph_id, (DISTINCT comment_id) as comment_count FROM comments GROUP BY paragraph_id");

while ($result_three = mysql_fetch_array($distinct)) 
{ 
    echo $result_three['paragraph_id']; // Gives the id of the paragraph
    echo $result_three['comment_count']; // Gives the comment count for the associated paragraph
}

Если я правильно понимаю вашу проблему, вам нужно GROUP BY paragraph_id. Попробуйте это:

SELECT paragraph_id, COUNT(*)
FROM comments
GROUP BY paragraph_id

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

SELECT p.paragraph_id,
       COUNT(c.comment_id) as comment_count 
FROM   comments c 
       RIGHT JOIN paragraphs p 
         ON c.paragraph_id = p.paragraph_id 
GROUP  BY p.paragraph_id 

Вот рабочий data.se пример

Используйте код ниже, это должно работать

$res = mysql_query("SELECT COUNT(DISTINCT paragraph_id) as cnt FROM comments");

while ($result_three = mysql_fetch_assoc($res)) { echo $result_three['cnt']; }