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 BY
id
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子句是不合适的。在这种情况下,您可能需要一个聚合函数。如果您希望按以下顺序将结果作为用户id
    25,36,42,95
    ,请尝试我发布的sql查询。这将产生与OP给出的查询完全相同的结果,因此这不是真正的答案。OP需要对表进行查询,不是针对已经给出正确答案的任意数据集。@siride,这是真的。他必须把它换成桌子。不是吗?等等,我有点误解了。我认为@adam said是对的。这是谁投的票?这个问题与计数无关!