【发布时间】:2020-10-23 08:33:32
【问题描述】:
如果我在一个表中有以下值:
表:user
身份证评分
1 5
2 4
1 3
2 2
显然在做SELECT * FROM USER
我把user表的所有值都拉出来了,但是如果我想计算两个ID的平均分,那么对于id(评分总和)和已经评价的个数的除法
ID:1 = (5+3) / 2 = 4
ID:2 = (4+2) / 2 = 3
我想根据之后计算的平均值对这些 ID 进行排序,而不是通过查询我该怎么做?
按顺序显示得分最高的用户
上传图片
我的结果:
global $wpdb;
$q = $wpdb->get_results(
$wpdb->prepare("
SELECT comment_id, avg(meta_value) avg_meta_value
FROM {$wpdb->prefix}commentmeta
WHERE {$wpdb->prefix}commentmeta.meta_key = 'rating'
GROUP BY comment_id
ORDER BY avg_meta_value desc")
<?php foreach ($q as $r){ ?>
<?php echo "{$r->comment_id}".'<br>'; ?>
<?php } ?>
但如果我加入:
SELECT comment_id, avg(meta_value) avg_meta_value
FROM {$wpdb->prefix}commentmeta
LEFT JOIN {$wpdb->prefix}comments
ON {$wpdb->prefix}commentmeta.comment_id = {$wpdb->prefix}comments.comment_ID
WHERE {$wpdb->prefix}commentmeta.meta_key = 'rating'
GROUP BY comment_id
ORDER BY avg_meta_value desc")
不再工作了
【问题讨论】:
-
你必须在 before foreach 之前进行排序 - 让数据库来做(ORDER BY)
-
“而不是通过查询” - 为什么不呢?在 SQL 中执行此操作听起来是更好的选择。
-
posted表(图片)如何对应users表?你想收到comment_it 来排序它的平均评分吗?
-
@SlavaRozhnev 是的,我写用户只是为了让人们了解问题所在,但是如果您检查我加入后立即更改的问题,它就不再起作用了
标签: php sql sql-order-by average