从mysql数据库到php的唯一字段
我有一个这样的示例数据库,其中id总是唯一的,但用户id不是唯一的 id、用户id、消息、消息日期时间从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的消息,时间在这里 因此,我只想抓取那些发过消息的唯一用户
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
我的代码中确实有表名,只是我没有在这里显示它。