对来自 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
这是我的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