7

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

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

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

它的用途是用于 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);
});

原帖

我有这张桌子(对不起,图像是我知道如何显示的唯一方式): 在此处输入图像描述

我想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;
?>
4

2 回答 2

14

使用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或准备好的语句。

于 2013-04-28T07:37:34.920 回答
1

查询将是

  SELECT SUM(meta_value) AS value_sum, comment_id FROM wp_play_commentmeta
  Group by comment_id
于 2013-04-28T07:39:13.610 回答