【发布时间】:2013-12-19 18:50:23
【问题描述】:
我有两张桌子。一个叫movies,另一个叫movies_downloads。以下是表格示例:
movies:
╔═══╦════════════╗
║ ║ name ║
╠═══╬════════════╣
║ 1 ║ Movie1 ║
║ 2 ║ Movie2 ║
║ 3 ║ Movie3 ║
╚═══╩════════════╝
movies_downloads:
╔═════════╦════════════╗
║ movieId ║ id (ai) ║
╠═════════╬════════════╣
║ 1 ║ 1 ║
║ 1 ║ 2 ║
║ 2 ║ 3 ║
║ 3 ║ 4 ║
╚═════════╩════════════╝
如您所见,它可能是同一部电影的movies_downloads 中的两行。 (在这种情况下,它是电影 #1)
我想选择从结尾到开头的所有电影,我想加入下载表,并从中取出最后一行(最大的 id)。
在这种情况下,结果将是:
MovieId Name movies_downloads.id
3 Movie3 4
2 Movie2 3
1 Movie1 2
问题是:它没有给我id#2(因为他是最后一个),而是给了id#1。 (这是第一个)
我的代码:
SELECT `movies`.*, `movies_downloads`.`id`
FROM `movies`
JOIN `movies_downloads`
ON `movies`.`id` = `movies_downloads`.`movieId`
GROUP BY `movies`.`id`
ORDER BY `movies_downloads`.`id`
DESC
LIMIT 10
顺便说一句,如果重要的话,我使用 mysql 引擎。
谢谢!
【问题讨论】:
-
这可能是一个设计问题:样本数据中没有任何内容表明
Link .或Link !是最新的。当您在没有ORDER BY的情况下执行SELECT *时获得的顺序是任意的,因此如果您需要非任意顺序,则需要by 来订购。我建议添加一个TIMESTAMP列来记录下载发生的时间。
标签: mysql sql join sql-order-by