【发布时间】:2017-10-20 20:20:44
【问题描述】:
晚上好,
我有以下两个表:
脚本
*----------------------------*
| user | script_id | name |
*----------------------------*
| 408 | 1 | script1 |
| 408 | 3 | script2 |
*----------------------------*
script_versions
*--------------------------------*
| id | version | script |
*--------------------------------*
| 1 | 1 | print "script1" |
| 1 | 2 | print "script2" |
| 3 | 0 | print "other1" |
| 3 | 1 | print "other2" |
*--------------------------------*
scripts 表包含有关脚本的一些常规信息,例如脚本的名称和所有者的用户 ID。表script_versions 包含每个脚本的所有不同版本的代码。
现在我想从数据库中检索:
我想获取给定 user 的所有脚本的最新版本(即最高的 version 数量)。
例如对于给定的数据,查询应该返回:
想要的结果
*-------------------------------------------------*
| id | version | script | user | name |
*-------------------------------------------------*
| 1 | 2 | print "script2" | 408 | script1 |
| 3 | 1 | print "other2" | 408 | script2 |
*-------------------------------------------------*
到目前为止我已经尝试过什么
这是我现在的查询。它不起作用,因为它并不总是选择所有脚本的最新版本(事实上,它目前总是选择最旧的)。
代码:
SELECT *
FROM scripts
LEFT
JOIN
( SELECT *
FROM script_versions
GROUP
BY id
ORDER
BY version DESC
) AS versions
ON scripts.script_id = versions.id
WHERE scripts.user = ?
编辑:
这个问题不是this question 的重复问题,因为提到的不是对结果进行排序/排序(按最新版本)。
【问题讨论】:
-
你为什么用
php标记这个? -
@Xatenev 我正在 php 中实现查询,但如果你愿意,我可以删除它:)
-
如果 ORDER BY 子句正常工作,你为什么不简单地反转它,除了顺序错误。
-
@Xatenev 这并没有改变任何东西,我认为这是因为
GROUP BY函数 -
您在编辑中的 cmets 不正确 - 这个问题完全是重复的,因为版本是您想要的最大版本。
标签: php mysql sql greatest-n-per-group