php - ORDER BY 具有两列

标签 php mysql sql database

我的mysql数据库中有两个表:

  1. 行程(id、名称、desc、创建时间)
  2. trip_ ratings(id、评级值、tripid、用户 ID)

我想要获取按较高平均评分排序的 100 条最近旅行。

我尝试过以下 mysql 查询:

SELECT AVG(ratingvalue),tripid,tripcreatedat FROM trip_ratings 
                                        INNER JOIN trips on trip_ratings.tripid = trips.id
                                        GROUP BY trip_ratings.tripid
                                        ORDER BY AVG(ratingvalue) DESC, tripcreatedat DESC
                                        LIMIT 100

但由于它首先按评分值排序,所以我只能得到按较高评分排序的旅行。

是否可以在单个查询中实现?谁能提示我该怎么办?

编辑:示例: 我在 trip_ ratings 表中有这样的数据:

enter image description here

从我尝试过的查询中我可以得到这样的结果。 enter image description here

但我的问题是:获取按较高平均评分排序的 100 个最近旅行。

除了投反对票和接近投票之外,任何人都可以有任何解决方案,或者任何人都可以给我一个提示,在单个查询中是否可能?谢谢。

最佳答案

一种选择是使用内联 View ,首先获取“100 个最近的行程”。

然后将其加入 trip_ ratings,以计算“平均评分”并按该结果排序。

SELECT m.id AS tripid
     , AVG(r.ratingvalue) AS average_rating
     , m.tripcreatedat
  FROM ( SELECT t.id
              , t.tripcreatedat
           FROM trips t
          ORDER BY t.tripcreatedat DESC
          LIMIT 100
       ) m
  LEFT
  JOIN trip_ratings r
    ON r.tripid = m.id
 GROUP BY m.id, m.tripcreatedat 
 ORDER BY AVG(r.ratingvalue) DESC

如果有多个行程具有相同的平均评分,则这些行程的返回顺序是不确定的。您可以在顺序中添加其他表达式以使其更具确定性。

 ORDER BY AVG(r.ratingvalue) DESC, m.tripcreatedat DESC, m.id DESC
<小时/>

这不是唯一的方法。还有其他方法可以达到相同的结果。

关于php - ORDER BY 具有两列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29352997/

相关文章:

javascript - Array of arrays - 为什么我的数组比我认为的多了一层?

php - 在 SELECT 查询中添加自定义行

php - 我正在尝试将一些数据放入我的数据库中。它创建新表但不填充它们

php - 查看多个用户在 CANVAS 上的实时绘图

sql - 显示表中不存在的行的逗号分隔值

PHP 密码尝试阻止

php - 等待连接到 XDEBUG 的 Netbeans

php - 如何将所有数据通过电子邮件发送到一封电子邮件中?

MySQL:WHERE IN 列表的限制结果

mysql - 一张表与两张不同表的关系