Значения SUM из столбца SQL из того же идентификатора

Это comment_meta из wordpress. Там есть пользовательский мета_ключ: рейтинг.

Я хотел бы получить СУММУ всех оценок для этого отдельного сообщения.

Суть в том, чтобы получить среднее значение из оценок пользователей. У меня есть общее количество комментаторов, мне просто нужна СУММА.

Его использование предназначено для сводного обзора Schema.org: <meta itemprop="ratingValue" content=""/>.

Я попытался добавить значение через jQuery, но по какой-то причине схема не регистрирует текст, добавленный позже в DOM.

var sum = 0;
$('.comment_rate').each(function(){
    numItems = $('.comment_rate').length
    sum += (parseFloat($(this).text()) / numItems);
    $('span[itemprop="ratingValue"]').text(sum);
});

ОРИГИНАЛЬНЫЙ ПОСТ

У меня есть эта таблица (извините, изображение - это единственный способ показать): введите описание изображения здесь

Я хотел бы суммировать meta_value из соответствующих comment_id.

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

<?php
    $result = mysql_query('SELECT SUM(meta_value) AS value_sum FROM wp_play_commentmeta');
    $row = mysql_fetch_assoc($result);
    $sum = $row['value_sum'];
    echo $sum;
?>

person markb    schedule 28.04.2013    source источник


Ответы (2)


Используйте GROUP BY:

SELECT comment_id, SUM(meta_value) AS value_sum 
FROM wp_play_commentmeta
GROUP BY comment_id;

Посмотрите это в действии здесь:


Если вы хотите сделать это только для тех, у кого был метаключ rating, добавьте его в предложение WHERE. Что-то вроде этого:

SELECT comment_id, SUM(meta_value) AS value_sum 
FROM wp_play_commentmeta
wHERE meta_key = 'rating'
GROUP BY comment_id;

Обновлять:

JOIN две таблицы и GROUP BY post_id. Что-то вроде этого:

SELECT 
  p.post_id,
  SUM(m.meta_value) AS value_sum
FROM wp_play_commentmeta    AS m
INNER JOIN wp_play_comments AS p ON m.comment_ID = p.comment_Id
wHERE meta_key = 'rating'
GROUP BY p.post_id;

Обратите внимание: прекратите использовать расширения Mysql_*, они устарели. Кроме того, такой код уязвим для SQL Injection. Вместо этого используйте PDO или подготовленные операторы.

person Mahmoud Gamal    schedule 28.04.2013
comment
Да, это сработало бы, но я полностью пренебрегал невозможностью сопоставить рейтинги, а не comment_id. - person markb; 28.04.2013
comment
@Ahhhhhhhhhhhhhdfgbv - Что ты имеешь в виду? Разве это не то, что вы ищете? Не могли бы вы обновить свой вопрос и показать мне ожидаемые результаты, которые вы ищете? Спасибо. - person Mahmoud Gamal; 28.04.2013
comment
@Ahhhhhhhhhhhhhdfgbv - Вы имеете в виду SUM только meta_value для тех, у кого meta_key = rating?? - person Mahmoud Gamal; 28.04.2013
comment
Обновил, надеюсь понятно. Извините, поздно осознал, что первоначальный мой вопрос был глупым. - person markb; 28.04.2013
comment
@Ahhhhhhhhhhhhhdfgbv Второй запрос должен дать вам то, что вы ищете, он должен дать вам сумму или рейтинг для каждого комментария. Разве это не то, что вы хотите? Ты это пробовал? - person Mahmoud Gamal; 28.04.2013
comment
Второй запрос возвращает только последнее значение рейтинга в цикле комментариев. Мне нужна сумма всех значений рейтинга, связанных с этим постом. - person markb; 28.04.2013
comment
@Ahhhhhhhhhhhhhdfgbv Есть ли столбец, который указывает на конкретный пост? Я не вижу такой колонки. Есть ли post_id или какой-либо столбец, относящийся к сообщению в этой таблице? Я вижу только meta_id, comment_id, meta_key и meta_value. - person Mahmoud Gamal; 28.04.2013
comment
Не в этой таблице. Существует еще одна таблица с именем wp_play_comments, в которой comment_post_ID (соответствует идентификатору сообщения) и comment_ID соответствует идентификатору на изображении. - person markb; 28.04.2013
comment
@Ahhhhhhhhhhhhhdfgbv - Почему вы не сказали этого в своем вопросе? Значит, они связаны друг с другом comment_id? а post_id поступает из второй таблицы wp_play_comments или из третьей таблицы?? - person Mahmoud Gamal; 28.04.2013
comment
Исходя из второго стола, я думаю, что все наоборот: wp_play_comments -> wp_play_commentmeta - person markb; 28.04.2013
comment
@Ahhhhhhhhhhhhhdfgbv - Вы должны просмотреть их. Что-то вроде while($row = mysql_fetch_array($result )){ echo $row['post_id']; echo $row['value_sum'];}, но, пожалуйста, старайтесь избегать расширений mysql_* и вместо этого используйте PDO, см. мое редактирование. - person Mahmoud Gamal; 28.04.2013

запрос будет

  SELECT SUM(meta_value) AS value_sum, comment_id FROM wp_play_commentmeta
  Group by comment_id
person Shafqat Masood    schedule 28.04.2013