来自同一ID的SQL列的SUM值

时间:2013-04-28 07:36:05

标签: php jquery mysql sql schema.org

这是来自wordpress的comment_meta。在有一个自定义meta_key:rating。

我想获得该帖子所有评分的总和。

这样做的目的是从用户评级中获得平均值。我有评论者的总数,我只需要SUM。

使用它是针对Schema.org AggregateReview:<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);
});

ORIGINAL POST

我有这张桌子(抱歉,图片只是我知道如何展示的方式): enter image description here

我想从匹配的meta_value中总结comment_id

到目前为止,我已经有了这个,但是它将整个列与不匹配相同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;
?>

2 个答案:

答案 0 :(得分:9)

使用GROUP BY

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

请在此处查看:


如果您只想对那些拥有rating metakey的人执行此操作,请在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或预备语句。

答案 1 :(得分:1)

查询将是

  SELECT SUM(meta_value) AS value_sum, comment_id FROM wp_play_commentmeta
  Group by comment_id