2010-09-16 37 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