情况是这样的-
我已经定制了评论提交,用户可以通过它提供评级,这将作为元值存储在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元字段,否则我必须在具有多个连接的查询中循环查询,这似乎是一个非常糟糕的主意。我希望有一个有着全新眼光的人能帮助我思考这个架构。