Как мы можем сделать подзапросы с количеством, где параметры одинаковы для всех запросов - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть 3 запроса, которые полезны для подсчета из 3 разных таблиц.Но мне нужен один запрос, чтобы получить три счета с помощью подзапросов, и я передаю
один и тот же параметр (user_id) на 3 запроса

1st:

SELECT COUNT(*) FROM `user_outlet` JOIN `outlet` 
ON `outlet`.`id`=`user_outlet`.`outlet_id`
WHERE `user_outlet`.`user_id`=? AND `user_outlet`.`isActive`=TRUE

2nd:

SELECT COUNT(*) FROM `audit_schedule` JOIN `user_outlet`  
ON `user_outlet`.id=`audit_schedule`.`auditer_id`
WHERE  `audit_schedule`.`auditer_id`=? 
AND MONTH(`audit_schedule`.`schedule_date`)=MONTH(NOW())

3-ий:

SELECT COUNT(*) FROM `audit` JOIN `user_outlet` 
ON `user_outlet`.id=`audit`.`auditor_id` 
WHERE  `audit`.`auditor_id`=? AND MONTH(`audit`.`created_date`)=MONTH(NOW())

выше - 3 запроса, которые я хотел сделать как один запрос с использованием подзапроса, и я ожидал, что Out будет выставлен как общее количество для 1-го запроса и плановое количество для 2-го запросазавершенный подсчет для 3-го запроса и передача только одного параметра user_id (т.е. =?)

1 Ответ

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

Если вы хотите повторно использовать параметр, вы можете поместить его в производную таблицу (подзапрос в предложении FROM).Пример:

FROM (SELECT ? as user_id) x

Затем вы можете повторно использовать псевдоним x.user_id:

SELECT (
    SELECT COUNT(*) FROM `user_outlet` JOIN `outlet` 
    ON `outlet`.`id`=`user_outlet`.`outlet_id`
    WHERE `user_outlet`.`user_id`=x.user_id AND `user_outlet`.`isActive`=TRUE
) as total_count, (
    SELECT COUNT(*) FROM `audit_schedule` JOIN `user_outlet`  
    ON `user_outlet`.id=`audit_schedule`.`auditer_id`
    WHERE  `audit_schedule`.`auditer_id`=x.user_id 
    AND MONTH(`audit_schedule`.`schedule_date`)=MONTH(NOW())
) as planned_count,
    SELECT COUNT(*) FROM `audit` JOIN `user_outlet` 
    ON `user_outlet`.id=`audit`.`auditor_id` 
    WHERE  `audit`.`auditor_id`=x.user_id AND MONTH(`audit`.`created_date`)=MONTH(NOW())
) as completed_count
FROM (SELECT ? as user_id) x
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...