MySQL按三列按desc顺序排序



我对MySQL是相对较新的,我很难通过三列对表进行排序。

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

如果可能的话,仅分类最后100个最近添加的视频(记录)将是最佳的,这些视频(记录)已通过"键"列自动增加。

在100个有序记录中,我将仅从数据库中检索五个记录并将其存储到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的人可以看一下,您将是救生员。

您实际上可以在单个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-每个都保留由Prior colution设置的订单。

update (最新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
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

最新更新