【发布时间】:2011-08-29 21:30:31
【问题描述】:
我有三个与消息传递系统相关的 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_id1 丢弃的所有邮件的邮件ID,但我不想检索重复的ID(例如,在上面的数据中,user_id1 是@987654324 的发件人和收件人@ 1. 我不想返回 1 的 message_id 两次,但想获取该用户的所有消息。
我想我需要结合使用JOIN 和UNION,但是经过一整天的 PHP,我的大脑无法正常工作!
【问题讨论】:
-
为收件人设置一个单独的表是有意义的,但为什么要设置一个单独的发件人表呢?这将允许单个消息的多个发件人,这没有多大意义。
-
消息可以由用户组发送,因此当以这种方式发送消息时,会为组中的每个用户输入单独的记录。
标签: php mysql database join union