簡體   English   中英

如果發送者 id 和接收者 id 值在任何列中進行數學運算,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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM