2014-01-05 35 views
-1

我有兩個表使用ORDER BY,GROUP BY和多選擇一起

表用戶

uid | username 
---------------- 
1 | brandon 
2 | john 
3 | nicole 

表private_msgs

id | from | to | message  | time 
------------------------------------------- 
1 | 1  | 2 | hi sister | 100 
2 | 1  | 3 | hi brother | 300 
3 | 1  | 2 | hi again! | 400 
4 | 2  | 3 | lolz message | 600 

(列時間是一個實際的時間戳,我只是做了這個例子很簡單)

'from'是用戶的uid

「到」是用戶的UID

我想從已發送到特定用戶的所有用戶得到最新消息

在這種情況下,特定的用戶是

$logged_id = 2; 

結果應返回與ID行= 3

查詢我到目前爲止

SELECT private_msgs.*, users.username FROM `private_msgs`, `users` 
WHERE private_msgs.to=$logged_id AND users.uid = private_msgs.from 
INNER JOIN (
    SELECT 
    from, max(time) as latest 
    FROM private_msgs 
    GROUP BY private_msgs.from 
) r ON private_msgs.time = r.latest AND private_msgs.from = r.from 
ORDER BY time DESC"); 

不過,我收到錯誤

Error Number: 1064 

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 'INNER JOIN (SELECT from, max(time) as latest FROM private_msgs ' at line 3 
+0

這個問題被問了很多。 – Strawberry

回答

0

有查詢幾個錯誤。除了後面的逗號,fromto是保留字,所以他們應該被引用:

SELECT pm.*, u.username 
FROM `private_msgs` pm join 
    `users` u 
    on pm.`to` = $logged_id AND u.uid = pm.`from` INNER JOIN 
    (SELECT `from`, max(time) as latest 
     FROM private_msgs 
     GROUP BY private_msgs.`from` 
    ) r 
    ON pm.time = r.latest AND pm.`from` = r.`from` 
ORDER BY time DESC; 
+0

非常感謝你,完美的作品 – user3023421

0

在這裏,您將會從所有用戶獲得最新消息。這是您的答疑人的查詢

SELECT * FROM 
    (SELECT * FROM `user` a,` private_msgs` b 
    WHERE a.uid=b.from order by time DESC) 
     t group by `from`