LEDER JOIN与ORDER BY和CASE

时间:2015-02-10 20:34:12

标签: mysql

我想从左边的连接中获取userdata表中的结果,但是它的运行顺序错误。

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>所有用户

朋友>朋友(每2位用户1行)

消息>行最多400

所以,snipped运行但是它使用了最新的行中最旧的tstamp(时间戳)。

1 个答案:

答案 0 :(得分:0)

您正在订购timestamp ASC,它首先表示最高值。在timestamp的情况下,它将不再是第一次

而是尝试ORDER BY f.tstamp DESC

此外,我认为您要选择max(f.tstamp)而不是f.tstamp

相关问题