如何根据评论元值的平均值对帖子进行排序

时间:2011-12-08 作者:elleeott

情况是这样的-

我已经定制了评论提交,用户可以通过它提供评级,这将作为元值存储在commentmeta表中。我可以查询以返回平均值并显示在帖子中。目前没有问题。

我现在想做的是按照这个平均评级对帖子进行排序。

我获得平均评分的代码是:

function average_rating() {
global $wpdb;
$post_id = get_the_ID();
$ratings = $wpdb->get_results("

    SELECT $wpdb->commentmeta.meta_value
    FROM $wpdb->commentmeta
    INNER JOIN $wpdb->comments on $wpdb->comments.comment_id=$wpdb->commentmeta.comment_id
    WHERE $wpdb->commentmeta.meta_key=\'rating\' 
    AND $wpdb->comments.comment_post_id=$post_id 
    AND $wpdb->comments.comment_approved =1

    ");
$counter = 0;
$average_rating = 0;    
if ($ratings) {
    foreach ($ratings as $rating) {
        $average_rating = $average_rating + $rating->meta_value;
        $counter++;
    } 
    //round the average to the nearast 1/2 point
    return (round(($average_rating/$counter)*2,0)/2);  
} else {
    //no ratings
    return \'no rating\';
}
}
我想我需要开始将平均值存储为post元字段,否则我必须在具有多个连接的查询中循环查询,这似乎是一个非常糟糕的主意。我希望有一个有着全新眼光的人能帮助我思考这个架构。

1 个回复
最合适的回答,由SO网友:Rutwick Gangurde 整理而成

我也做过类似的事情。首先,使用get_comment_meta 要获得每评论评级,不需要SQL。然后获得平均评分(添加单个帖子的个人评论评分/该帖子的评论数)。然后将此平均值存储为该帖子的帖子元。使用WP_Query 自定义字段参数,用于对这些帖子进行排序。

结束

相关推荐

FB Comments box post to wall?

我有一个博客,我有一个FB评论框。当我发布博客时,它还向粉丝页面发送了一条关于博客的简介,然后将帖子id与帖子一起存入数据库。但是,当用户在FB评论框中发表评论时,我是否也可以将该帖子作为对粉丝页面上实际帖子的评论?