Php 如何按用户id分组和按描述排序
您好,我知道这是非常基本的,但现在我很困惑,我想按Php 如何按用户id分组和按描述排序,php,mysql,sql,group-by,Php,Mysql,Sql,Group By,您好,我知道这是非常基本的,但现在我很困惑,我想按user\u idORDER BYidDESC LIMIT 4进行分组(我已经发布了表格和我的查询的简短示例) 我的表看起来像id是自动递增的,我只保存用户id,我只想获取一个用户id,这是数据库中的最后一个条目,忽略其他条目 Table --------------------- id | user_id | --------------------- 13 | 25 | 12 | 36
user\u id
ORDER BYid
DESC LIMIT 4进行分组(我已经发布了表格和我的查询的简短示例)
我的表看起来像id是自动递增的,我只保存用户id,我只想获取一个用户id,这是数据库中的最后一个条目,忽略其他条目
Table
---------------------
id | user_id |
---------------------
13 | 25 |
12 | 36 |
11 | 25 |
10 | 42 |
9 | 95 |
8 | 25 |
7 | 95 |
---------------------
so on
我试过这个
SELECT * FROM `table` GROUP BY user_id ORDER BY `id` DESC LIMIT 4
我想让它输出25,36,42,95
我也尝试了很多实验,但似乎没有任何效果。
我是否需要时间戳或其他东西才能在小组中完成?或者什么查询可以工作?您可以使用
distinct
,而不是分组,如下面的sql查询
SELECT distinct(user_id) FROM `table` ORDER BY `id` DESC LIMIT 4
您正在按进行部分
分组,但其工作方式与预期不符。以下是生成所需结果的查询:
选择MAX(id)作为MAXID,user\u id
从`表`
按用户id分组
按MAXID DESC排序
限制4
这种行为是:
MySQL扩展了GROUPBY的使用,以便选择列表可以引用
GROUP BY子句中未命名的未聚合列。[…]你可以
使用此功能可以避免不必要的错误,从而获得更好的性能
列排序和分组。但是,这主要在以下情况下有用:
在GROUP BY中未命名的每个未聚合列中的所有值都是
每组相同服务器可以从中自由选择任何值
每个组,因此,除非它们相同,否则选择的值是
不确定的此外,还需要从每组中选择值
不能受添加ORDER by子句的影响。分类
结果集发生在选择值之后,而ORDER BY不发生
影响服务器在每个组中选择的值。
从中选择*(
选择13个id,25个用户id
联合所有
选择12个id,36个用户id
联合所有
选择11id,25userid
联合所有
选择10个id,42个用户id
联合所有
选择09 id,95 UserID
联合所有
选择08 id,25 UserID
联合所有
选择07 id,95 UserID
)a
按用户id分组按id
DESC LIMIT 4尝试以下操作
SELECT MAX(id) as countid , `user_id` from `table`
GROUP BY `user_id`
ORDER BY countid DESC
LIMIT 20
在您的示例中,您需要获得类似于25,36,42,95的结果,但需要按ID字段排序。
如果你按它排序,你会得到不同的结果
您在查询中获得了一个分组,因此无法使用未在查询中选择的列(id位于此处)
如果您仍然需要按id订购,我认为您需要按最大('id')或最小('id')添加订单
就你而言,我将提出下一个问题:
SELECT user_id FROM `table` GROUP BY user_id ORDER BY MAX(`id`) DESC LIMIT 4
你得到了什么?给定您的表和查询,我没有发现任何错误。我以desc顺序获取用户id。您想在一行中使用此项吗?如果没有聚合函数,使用GROUP BY子句是不合适的。在这种情况下,您可能需要一个聚合函数。如果您希望按以下顺序将结果作为用户id25,36,42,95
,请尝试我发布的sql查询。这将产生与OP给出的查询完全相同的结果,因此这不是真正的答案。OP需要对表进行查询,不是针对已经给出正确答案的任意数据集。@siride,这是真的。他必须把它换成桌子。不是吗?等等,我有点误解了。我认为@adam said是对的。这是谁投的票?这个问题与计数无关!