我有三个与消息传递系统相关的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_id1丢弃的所有邮件的邮件ID,但我不想检索重复的ID(例如,在上面的数据中,user_id1是message_id1的发送者和接收者)。我不想返回1的message_id两次,但想获取该用户的所有消息。
我想我需要使用JOINUNION的组合,但是经过一整天的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/

10-08 20:28