使用IN语句内的SELECT语句中的列进入主查询

时间:2015-04-12 09:33:32

标签: mysql sql mysqli

这是我的疑问:

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))

我收到来自/已发送消息的消息的人员列表显示,但未正确排序。我希望新邮件收件人位于顶部,旧邮件收件人位于底部。我该怎么做呢?

2 个答案:

答案 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

答案 1 :(得分:0)

你正在整理错误的东西。对于IN,订单并不重要。您想要订购的是结果。所以你想要做的是JOIN your users table和你的messages表,然后将ORDER BY追加到主查询的末尾(并将其从两个子查询中删除,因为它&# 39;那里不需要。)