2010-09-16 34 views
0

我有一个这样的示例数据库,其中,id始终是唯一的,但user_id不唯一。独特的字段从MySQL数据库到PHP

ID,USER_ID,消息,msg_datetime
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,此处存在的时间

所以我只想抓住那些有消息并通过msg_datetime在DESC中排序的唯一用户。

这是我的查询。
select id,DISTINCT user_id,msg_datetime ORDER BY msg_datetime DESC但我得到一个错误:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DISTINCT。这里有什么帮助?什么是我想要实现的正确语法?

我想为每个用户只显示一个条目,显示哪个ID并不重要,但每个用户只有一个。

回答

1

如果你不关心哪个记录与同USER_ID查询应返回,然后

SELECT id,user_id,msg_datetime FROM table_1 GROUP BY user_id ORDER BY msg_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; 
+0

嘿看起来这是你的第一个代码解决了它。大。谢谢 :) – 2010-09-16 19:43:29

0

SELECT语法:

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

您kindof忘了说,你想从数据的表。

+0

我有我的代码表的名称,它只是我这里没有表现出来。 – 2010-09-16 19:41:40

0

您误解了DISTINCT的工作原理。它适用于没有字段。你想要的是一个分组最大值,也被称为每个组最大值。

这里是做在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