Один запрос из нескольких таблиц MySql - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть таблицы, содержащие одно и то же поле, например:

p_central_ticket        p_south_ticket             p_west_ticket 
=====================================================================
- t_id                  - t_id                     - t_id
- t_open_by             - t_open_by                - t_open_by 
- t_closed_by           - t_closed_by              - t_closed_by 
- t_open_time           - t_open_time              - t_open_time 
- t_closed_time         - t_closed_time            - t_closed_time

Одна вещь, которую я ожидаю, это вывод точно такой же, но определенно для 3 таблиц выше в одном запросе:

Name                today      weekly     monthly     yearly     
=================================================================   
test1@random.com         2           10          70        1000         
test2@random.com         5           14          60        1234

Но мой запрос сейчас только для вычисления 1 таблицы.

SELECT t_closed_by As Username, ixt_user_type.user_owner As Role,
    COUNT( case when t_closed_time > curdate() - interval 1 day THEN 1 END ) as today,
    COUNT( case when t_closed_time > curdate() - interval 7 day THEN 1 END ) as weekly,
    COUNT( case when t_closed_time > curdate() - interval 1 month THEN 1 END ) as monthly,
    COUNT( case when t_closed_time > curdate() - interval 1 year THEN 1 END ) as yearly
FROM p_central_ticket
LEFT JOIN m_event_type ON p_central_ticket.t_req_type = m_event_type.ev_type
LEFT JOIN ixt_user_type ON m_event_type.ev_user_type_target = ixt_user_type.user_type
WHERE t_status = 9
GROUP BY t_closed_by;

Мой вопрос заключается в том, как мне сделать так, чтобы мой запрос вычислялся из 3 таблиц, но в одном запросе?

1 Ответ

0 голосов
/ 13 февраля 2019

Вы можете использовать UNION для объединения трех таблиц и применить все ваши объединения к этой объединенной таблице, как показано ниже -

SELECT t_closed_by As Username, ixt_user_type.user_owner As Role,
    COUNT( case when t_closed_time > curdate() - interval 1 day THEN 1 END ) as today,
    COUNT( case when t_closed_time > curdate() - interval 7 day THEN 1 END ) as weekly,
    COUNT( case when t_closed_time > curdate() - interval 1 month THEN 1 END ) as monthly,
    COUNT( case when t_closed_time > curdate() - interval 1 year THEN 1 END ) as yearly
FROM 
( select * from p_central_ticket 
  union 
  select * from p_south_ticket 
  union 
  select * from p_west_ticket
)A 
LEFT JOIN m_event_type ON A.t_req_type = m_event_type.ev_type
LEFT JOIN ixt_user_type ON m_event_type.ev_user_type_target = ixt_user_type.user_type
WHERE t_status = 9
GROUP BY t_closed_by
...