2015-02-10 93 views
-1

我想從左邊的連接,它的運行順序錯誤,但它的順序錯誤,從userdata表中得到結果。左加入ORDER BY和CASE

SELECT 
u.id, 
u.name, 
f.tstamp 
FROM userdata AS u 
LEFT JOIN messages AS f ON (u.id=f.user_id) OR (u.id=f.friend_id) 
WHERE u.id IN 
    (
     SELECT CASE 
     WHEN user_id='".$uid."' 
     THEN friend_id 
     ELSE user_id 
     END FROM `friends` 
     WHERE 
     (
      user_id='".$uid."' or friend_id = '".$uid."' 
     ) 
     and type=2 
    ) 
GROUP BY u.id 
ORDER BY f.tstamp ASC, u.onl DESC, u.name 

的userdata>所有用戶

朋友>好友(1個每2個用戶行)

消息>行高達400

如此,剪斷運行,但它的使用最古老TSTAMP (時間戳),而不是最新的。

+0

嘗試'f.tstamp DESC'而不是'ASC'。 – 2015-02-10 20:37:06

+0

一般來說,sql的問題去http://dba.stackexchange.com/ – 2015-02-10 20:39:35

回答

0

您正在訂購timestamp ASC,這意味着最高價值第一。在timestamp的情況下就不會那麼近期第一

而是嘗試ORDER BY f.tstamp DESC

此外我認爲你要選擇max(f.tstamp),而不是f.tstamp

+0

相同的效果,輸出舊的時間戳... – 2015-02-10 20:43:27

+0

你使用'順序f.tstamps desc'和結果是一樣的嗎? – 2015-02-10 20:47:01

+0

我知道這是困惑,但是它...這個時間戳1423592380即將到來,但我想要這1423592409 .... – 2015-02-10 20:49:33