在MySQL数据库中给出这样的结构
#data_table
(id) | user_id | time | (...)
#relations_table
(id) | user_id | user_coach_id | (...)
我们可以选择属于某个data_table
的所有user_coach_id
行(让我们说1)
SELECT rel.`user_coach_id`, dat.*
FROM `relations_table` rel
LEFT JOIN `data_table` dat ON rel.`uid` = dat.`uid`
WHERE rel.`user_coach_id` = 1
ORDER BY val.`time` DESC
返回类似
的内容| user_coach_id | id | user_id | time | data1 | data2 | ...
| 1 | 9 | 4 | 15 | foo | bar | ...
| 1 | 7 | 3 | 12 | oof | rab | ...
| 1 | 6 | 4 | 11 | ofo | abr | ...
| 1 | 4 | 4 | 5 | foo | bra | ...
(等等。当然,时间不是现实中的整数,而是为了保持简单。)
但是现在我想查询(理想情况下)每个不同data_table
的{{1}}行的任意数量的行,但仍然有那些有序的行(即最新的行)。这甚至可能吗?
我知道我可以使用user_id
每个用户只返回1行,但是排序不起作用,结果中哪一行似乎有点不可预测。我猜它可以用子查询来实现,但我还没想到它。
答案 0 :(得分:0)
限制每个GROUP中的行数很复杂。最好用@variable来计算,加上一个外部查询来抛出超出限制的行。
我在Groupwise Max上的博客提供了一些如何做到这一点的提示。