对来自 2 个不同列的联合结果使用排序依据和分组依据

Use Order By, and Group by on a Union result from 2 different columns

这是我的Table

ID      Value           SenderID     RecieverID
1       Hello There         2           7
2       etc etc             7           5
3       etc                 2           6
4       ee                  7           2
5       asdas               2           7
6       asdas               2           5
7       asdas               7           5

我想要的是来自所有行的 senderID 或 receiverID 的值,其中特定值假设 2 出现在这两列的任何一列中
我使用了这个查询

SELECT `SenderID` FROM `messages` WHERE `RecieverID` = 2
UNION
SELECT `ReceiverID` FROM `messages` WHERE `SenderID` = 2 

给出了独特的答案但顺序错误 像这样

ReceiverID
7
6
5

我希望此查询的答案按 ID DESC 排序,其中出现特定的发件人或收件人 ID 例如在我的表中,senderid 2 和 reverid 7 之间的消息在 id 5 和最新的 id btweend sendr2 和 6 在 id 3 和 btweed sndr2 和 5 它是 ID 7 所以上面的答案应该像这样排序 5, 7, 6 而不是 7,6,5

您需要在括号中使用内部查询以设置顺序引用的内容:

SELECT id, senderID from 
  (SELECT ID, `SenderID` FROM `messages` WHERE `RecieverID` = 2
   UNION
   SELECT ID, `RecieverID` as senderId FROM `messages` WHERE `SenderID` = 2
  ) as A
GROUP BY (SenderID)
order by ID ASC
SELECT ID, IF(`SenderID` = 2,`RecieverID`,`SenderID`)
  FROM `messages`
 WHERE `RecieverID` = 2 OR `SenderID` = 2
 group by IF(`SenderID` = 2,`RecieverID`,`SenderID`)
 order by ID ASC

此人将按他们最近的对话对 sender/receiver 个 ID 进行排序:

SELECT senderID -- , MAX(ID) as maxID -- uncomment to see maxID
FROM (
  SELECT ID, `SenderID` FROM `messages` WHERE `RecieverID` = 2
  UNION ALL
  SELECT ID, `RecieverID` FROM `messages` WHERE `SenderID` = 2
) as sub
GROUP BY (SenderID)
ORDER BY MAX(ID) DESC

http://sqlfiddle.com/#!9/6d7bc0/1