【问题标题】:Sort the results in a foreach在 foreach 中对结果进行排序
【发布时间】: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


【解决方案1】:

使用avg():

select id, avg(rating) avg_rating from user group by id order by avg_rating desc

【讨论】:

    猜你喜欢
    • 2020-01-27
    • 1970-01-01
    • 2014-01-17
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 2019-11-08
    • 1970-01-01
    • 2021-04-24
    相关资源
    最近更新 更多