![](/img/trans.png)
[英]How to get all messages between sender id and receiver id on mysql?
[英]Mysql display one colum if sender id and receiver id values mathes in any of the colums
如果兩列匹配和堡壘,我如何顯示數據庫中的單個記錄
也許舉個例子會更清楚。 給定一個名為過濾器的表,我有 3 列(id、sender_id、receiver_id):
---+-------------------+--------------+
id | sender_id | receiver_id |
---+-------------------+--------------+
1 | 1 | 2 |
2 | 2 | 1 |
3 | 3 | 4 |
4 | 4 | 3 |
---+-------------------+--------------+
如果sender_id 1
將消息發送到sender_id 2
並且sender_id 2
將消息發送回sender_id 1
那么它們是一個對話並且應該只顯示一條記錄,我想要上表的結果是:
---+-------------------+--------------+
id | sender_id | receiver_id |
---+-------------------+--------------+
1 | 1 | 2 |
3 | 3 | 4 |
---+-------------------+--------------+
如果你不關心排序,你可以使用聚合:
select min(id), least(sender_id, receiver_id), greatest(sender_id, receiver_id)
from t
group by least(sender_id, receiver_id), greatest(sender_id, receiver_id);
注意:這可以返回一個不在原始數據中的對——如果該對不在那里。
使用正確索引可能更快的替代方法是:
select t.*
from t
where sender_id < receiver_id or
not exists (select 1
from t t2
where t2.receiver_id = t.sender_id and t2.sender_id = t.receiver_id
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.