2015-04-12 61 views
1

這裏是我的查詢:使用從IN語句中SELECT語句中的列到主查詢

SELECT id 
FROM users 
WHERE (id IN (
    SELECT user_id 
    FROM messages 
    WHERE recipient_id='$my_user_id' ORDER BY time DESC) 
    OR id IN (
    SELECT recipient_id 
    FROM messages 
    WHERE user_id='$my_user_id' ORDER BY time DESC)) 

我從收到的郵件的人的名單/發送到出現的消息,但它們沒有排序正常。我希望新郵件收件人位於最上方,而舊郵件收件人位於最下方。我該如何解決它?

回答

0

你正在整理錯誤的東西。對於IN,訂單無關緊要。你想要訂購的是最終結果。所以你想要做的是JOIN your users tablemessages表,然後在主查詢的末尾追加ORDER BY(並從兩個子查詢中刪除它,因爲它不需要那裏)。

+0

嗨,謝謝。如果這不是問題,你能展示一個代碼示例嗎?這真的會有所幫助。謝謝! –

1
SELECT u.id 
FROM users u 
JOIN messages m on m.recipient_id = u.id 
       or m.user_id = u.id 
WHERE u.id = '$my_user_id' 
ORDER BY m.time DESC