从mysql数据库到php的唯一字段

从mysql数据库到php的唯一字段,php,mysql,distinct,Php,Mysql,Distinct,我有一个这样的示例数据库,其中id总是唯一的,但用户id不是唯一的 id、用户id、消息、消息日期时间 111,u1,来自u1的消息,此处出现的时间 112,u2,来自u2的消息,此处出现时间 113,u3,来自u3的消息,此处出现的时间 114,u2,来自u2的消息,此处出现时间 115,u7,来自u7的消息,此处出现的时间 116,u2,来自u2的消息,此处出现时间 117,u1,来自u1的消息,此处出现的时间 118,u5,来自u5的消息,时间在这里 因此,我只想抓取那些发过消息的唯一用户

我有一个这样的示例数据库,其中id总是唯一的,但用户id不是唯一的

id、用户id、消息、消息日期时间
111,u1,来自u1的消息,此处出现的时间
112,u2,来自u2的消息,此处出现时间
113,u3,来自u3的消息,此处出现的时间
114,u2,来自u2的消息,此处出现时间
115,u7,来自u7的消息,此处出现的时间
116,u2,来自u2的消息,此处出现时间
117,u1,来自u1的消息,此处出现的时间
118,u5,来自u5的消息,时间在这里

因此,我只想抓取那些发过消息的唯一用户,并通过msg_datetime在DESC中对其进行排序

这就是我的疑问。
按msg\u datetime DESC选择id、DISTINCT user\u id、msg\u datetime ORDER
但我得到一个错误:
您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以了解可在“DISTINCT
附近使用的正确语法。有人帮忙吗?对于我要实现的目标,正确的语法是什么

我只想为每个用户显示一个条目,无论显示哪个ID,每个用户只显示一个条目。

选择语法:

SELECT (fieldlists)
FROM (table)
[WHERE (conditions)]
ORDER BY (something)

您有点忘了说您想从哪个表中获取数据。

如果您不关心应该返回哪个具有相同用户id查询的记录,那么

从表1中选择id、user\u id、msg\u datetime按user\u id排序按msg\u datetime DESC

例如,如果要显示每个用户的最后一条记录,则需要

SELECT a.user_id, a.last_time, b.id 
FROM
(SELECT user_id, MAX(msg_datetime) as last_time 
 FROM table1)a
INNER JOIN table1 b ON (b.user_id = a.user_id AND b.msg_datetime = a.last_time)

ORDER BY a.last_time;

你误解了DISTINCE的工作原理。它适用于而不是字段。您需要的是一个分组最大值,也称为每个组最大n个

在MySQL中有一种方法可以做到这一点:

SELECT id, user_id, message, msg_datetime
FROM (
    SELECT
        id, user_id, message, msg_datetime,
        @rn := CASE WHEN @prev_user_id = user_id
                    THEN @rn + 1
                    ELSE 1
               END AS rn,
        @prev_user_id := user_id
    FROM (SELECT @prev_user_id := NULL) vars, Table1 T1
    ORDER BY user_id, msg_datetime DESC
) T2
WHERE rn = 1
ORDER BY msg_datetime

我的代码中确实有表名,只是我没有在这里显示它。