【问题标题】:MySQL Sorting By Three Columns in DESC OrderMySQL按DESC顺序按三列排序
【发布时间】:2012-10-23 19:42:47
【问题描述】:

我对 MySQL 比较陌生,我很难尝试按三列对表进行排序。

这是一个存储了数千个视频数据的数据库,我想在我的网站上创建一个标签,列出向用户推荐的视频。

如果可能,最好只对最近添加的最近 100 个视频(记录)进行排序,这些视频(记录)已按“键”列自动递增。

在 100 条有序记录中,我实际上只会从数据库中检索 5 条记录并将它们存储到 PHP 变量中。

我试图让它按如下方式对列进行排序。

key DESC
rating_score DESC
view_count DESC

我之前使用了另一个 MySQL 语句,它按有效的两列对视频进行排序。

SELECT  `title`, `duration`, `rating_score`, `imageurl`, `player_url` FROM (SELECT * FROM `archived_videos` ORDER BY `key` DESC LIMIT 0,210) AS ttbl ORDER BY `rating_score` DESC

上述按三列排序的 MySQL 语句的当前版本和修改版本如下所示。

SELECT  `title`, `duration`, `rating_score`, `imageurl`, `player_url` FROM ((SELECT * FROM `archived_videos` ORDER BY `key` DESC LIMIT 0,100) AS ttbl (SELECT * FROM `archived_videos` ORDER BY `view_count` DESC) AS ttbl) ORDER BY `rating_score` DESC LIMIT 0,5

如果精通 MySQL 的人可以看看这个,你将是一个救命稻草。

【问题讨论】:

  • 这条评论主要是给想回答的人准备的。这个问题似乎有点误导。期望的结果是(我认为)100 个最新条目中评分最高的 5 个条目。仅按key 列排序不会得到想要的结果。
  • @G-Nugget +1...感谢您的澄清。

标签: mysql sorting field


【解决方案1】:
SELECT  `title`, `duration`, `rating_score`, `imageurl`, `player_url` 
FROM (
    SELECT * 
    FROM `archived_videos` 
    ORDER BY `key` DESC 
    LIMIT 100
) AS sub 
ORDER BY `rating_score` DESC, `view_count` DESC
LIMIT 5

【讨论】:

【解决方案2】:

您实际上可以在单个SELECT 语句中对多个列进行排序,无需使用子查询:

SELECT
    title, duration, rating_score, imageurl, player_url
FROM
    archived_videos
ORDER BY
    key DESC,
    rating_score DESC,
    view_count DESC
LIMIT 5

结果/列将按照您列出的顺序进行排序。首先,它们将按key 列排序,然后这些将按rating_score 排序,然后是view_count - 每个都保持先前列设置的顺序。

更新(最新 100 个中的前 5 个)
我第一次读错了原始问题;如果希望从最新的 100 个视频中选择前​​ 5 个视频,您可以使用单个子查询来获取最新的 100 个,然后使用外部查询来获取前 5 个:

SELECT
    title, duration, rating_score, imageurl, player_url
FROM (
    SELECT
        title, duration, rating_score, imageurl, player_url
    FROM
        archived_videos
    ORDER BY
        key DESC
    LIMIT 100
    ) AS top_100
ORDER BY
    rating_score DESC,
    view_count DESC
LIMIT 5

【讨论】:

  • 查看我对原始问题的评论
  • 感谢您投入时间和精力来帮助我,我真的很感激。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-08
  • 2012-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-07
  • 2011-11-22
相关资源
最近更新 更多