如何按用户ID分组并按desc排序

MeA*_*elf 1 php mysql sql group-by

您好我知道这是非常基本的但是现在我很困惑我想要通过DESC LIMIT 4的GROUP BY user_idORDER id(我已经发布了表和我的查询的简短示例)

我的表看起来像id是自动增量我只保存user_id我只想要一个user_id只有一次,这是数据库中最新的条目忽略其他.

Table
---------------------
id     |   user_id  |
---------------------
13     |    25      |
12     |    36      |
11     |    25      |
10     |    42      |
9      |    95      |
8      |    25      |
7      |    95      |
---------------------
so on
Run Code Online (Sandbox Code Playgroud)

我试过这个

SELECT * FROM  `table` GROUP BY user_id ORDER BY `id` DESC LIMIT 4
Run Code Online (Sandbox Code Playgroud)

我希望它输出25,36,42,95我也尝试了很多实验,但似乎没有任何工作.我是否需要时间戳或其他东西来组成团体?或者什么查询将起作用?

Sal*_*n A 6

你正在做一个GROUP BY不能按照你期望的方式工作的部分.这是一个产生所需结果的查询:

SELECT MAX(id) AS MAXID, user_id
FROM `table`
GROUP BY user_id
ORDER BY MAXID DESC
LIMIT 4
Run Code Online (Sandbox Code Playgroud)

这里解释了这种行为:

MySQL扩展了GROUP BY的使用,因此选择列表可以引用GROUP BY子句中未命名的非聚合列.[...]您可以通过避免不必要的列排序和分组来使用此功能来获得更好的性能.但是,当GROUP BY中未命名的每个非聚合列中的所有值对于每个组都相同时,这非常有用.服务器可以自由选择每个组中的任何值,因此除非它们相同,否则所选的值是不确定的.此外,添加ORDER BY子句不会影响每个组中值的选择.选择值后会对结果集进行排序,而ORDER BY不会影响服务器选择的每个组中的值.