我对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的人可以看看这个,那么你就可以节省生命。
答案 0 :(得分: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
答案 1 :(得分:2)
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