我有三个与消息传递系统相关的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 |
我的问题是如何选择由用户发送或由用户接收的所有消息,其中crashed参数设置为1,而不选择重复的消息。例如,考虑以下场景:
我想获取
user_id
1丢弃的所有邮件的邮件ID,但我不想检索重复的ID(例如,在上面的数据中,user_id
1是message_id
1的发送者和接收者)。我不想返回1的message_id
两次,但想获取该用户的所有消息。我想我需要使用
JOIN
和UNION
的组合,但是经过一整天的PHP之后,我的大脑无法工作! 最佳答案
试试这个,看看它是否只为消息表中的每条消息返回一行。。。
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>
关于php - 来自3个表的MySQL数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6076279/