Объединить 2 таблицы; Фильтр по id; Сортировать по дате - PullRequest
0 голосов
/ 02 августа 2020

Я хочу объединить 2 таблицы:

order_ticket_messages:

enter image description here

Sample data:

enter image description here


order_files:

enter image description here

Sample data:

введите описание изображения здесь

Порядок должен быть таким же, и я хочу отсортировать их как C по дате. Не все данные должны быть включены, но требуется идентификатор (и способ узнать, является ли это сообщением или файлом).

Я понятия не имею, как это сделать. Будет что-то с JOIN, но на этом мои знания заканчиваются.

Ожидаемый результат:

ID | СООБЩЕНИЕ | ФАЙЛ | ДАТА

Если это сообщение, файл будет NULL. Если это файл, сообщение будет NULL. (Могу загрузить данные заказа по ID).

Ответы [ 2 ]

1 голос
/ 02 августа 2020

Вы хотите выбрать сообщения и файлы для одного заказа. Это два отдельных запроса: один - сообщения, второй - файлы. Вы хотите объединить их наборы результатов.

Запрос

select id, message, null as file, date from order_ticket_messages where order_id = 1
union all
select id, null as message, file, date from order_files where order_id = 1
order by date;

Пример вывода

+----+-------------+-----------+---------------------+
| ID | MESSAGE     | FILE      | DATE                |
+----+-------------+-----------+---------------------+
| 1  | Omshrijving |           | 2020-07-23 14:47:18 |
| 2  | Dat kan     |           | 2020-07-23 15:03:08 |
| 24 |             | 38328.png | 2020-08-02 16:22:38 |
| 25 |             | fud82.png | 2020-08-02 16:23:29 |
+----+-------------+-----------+---------------------+
1 голос
/ 02 августа 2020

То, что вы описываете, может быть достигнуто с помощью UNION ALL, а не JOIN:

select m.id, m.message, null file, m.date 
from order_ticket_messages m
where exists (select 1 from order_files where orderid = m.orderid)
union all
select f.id, null, f.file, f.date 
from order_files f
where exists (select 1 from order_ticket_messages where orderid = f.orderid)
order by date

Или, если вы хотите сохранить сообщения и файлы с одним и тем же orderid вместе:

select id, message, file, date
from (
  select m.id, m.message, null file, m.date, m.orderid 
  from order_ticket_messages m
  where exists (select 1 from order_files where orderid = m.orderid)
  union all
  select f.id, null, f.file, f.date, f.orderid 
  from order_files f
  where exists (select 1 from order_ticket_messages where orderid = f.orderid)
) t
order by orderid, date
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...