2015-02-10 67 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