У меня есть три таблицы 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 |
Мой вопрос заключается в том, как бы выбрать все сообщения, отправленные или полученные пользователем, где для параметра trashed установлено значение 1без выбора дубликатов сообщений.Например, рассмотрим следующий сценарий:
Я хочу получить идентификаторы сообщений для всех сообщений, разбитых на user_id
1, но я не хочу получать дубликаты идентификаторов (в приведенных выше данных, например, user_id
1 является отправителем И получателем message_id
1. Я не хочу возвращать message_id
из 1 дважды, но хочу получить все сообщения для этого пользователя.
Я думаю, что мне нужноиспользуйте комбинацию JOIN
и UNION
, но мой мозг не работает после долгого дня PHP!