簡體   English   中英

來自3個表的MySQL數據

[英]MySQL Data from 3 tables

我有三個與消息傳遞系統相關的MySQL表。 下面顯示了與我的問題有關的每個表的模式和樣本數據:

`messages`:
+----+---------+----------+
| id | subject | senddate |
+----+---------+----------+
| 1  | Testing | 12344555 |
+----+---------+----------+

`message_senders`:
+------------+---------+---------+
| message_id | user_id | trashed |
+------------+---------+---------+
|      1     |    1    |    1    |
+------------+---------+---------+

`message_recipients`:
+------------+---------+------+----------+---------+
| message_id | user_id | type | readdate | trashed |
+------------+---------+------+----------+---------+
|      1     |    1    |  to  | 12344555 |    1    |
+------------+---------+------+----------+---------+
|      2     |    1    |  cc  | 12344555 |    1    |

我的問題是,我如何選擇由用戶發送或接收的所有郵件,將垃圾郵件參數設置為1,而不選擇重復的郵件。 例如,請考慮以下情形:

我想獲取被user_id 1刪除的所有郵件的郵件ID,但是我不想檢索重復的ID(例如,在上面的數據中, user_id 1是message_id 1的發送方和接收方。我不想返回兩次message_id 1,但是要獲取該用戶的所有消息。

我想我需要結合使用JOINUNION ,但是經過一整天的PHP,我的大腦無法正常工作!

嘗試此操作,看看它是否僅對message表中的每條消息返回一行。

    select * from messages 
left join message_senders on messages.id = message_senders.message_id 
left join message_recipients on messages.id = message_recipients.message_id 
where message_senders.trashed = 1 or message_recipients.trashed = 1 and messages.user_id = <value>

我想到的解決方案是使用UNION d子查詢:

SELECT DISTINCT * FROM messages WHERE id IN (
    (SELECT message_id FROM message_recipients WHERE user_id=1 AND trashed=1)
  UNION
    (SELECT message_id FROM message_senders WHERE user_id=1 AND trashed=1)
)

假設您已經想到了查詢-我只是暗示您可以使用DISTINCT關鍵字來強制數據庫不返回重復項。 我相信您可以自己解決,因為自我結論最有效。

另外,一條建議-始終將日期存儲為datetimedate而不是int 您可以避免夏令時問題,並且可以使用MySQL提供的各種日期函數。 日期在內部保存為4個字節的整數,與int字段相同。

在這里,試一試:

select distinct m.id
from messages m
left join message_senders s on m.id = s.message_id
left join message_recipients r on m.id = r.message_id
where ((s.user_id = 1 and s.trashed = 1) or (r.user_id = 1 and r.trashed = 1))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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