Не получается правильно написать запрос, прошу помощи у знающих людей!
Задача: просчитать конкуренцию на конкретное место выставки. Входные данные: Таблица распределения мест на выставке. У меня есть id клиента. По нему я нахожу все выставки и места на них в которых он(клиент) участвовал.
SELECT `be`.`exhibition_id` AS `exhibition_id`, `be`.`place_num` AS `num_place`
FROM `b_exhibition` AS `be`
WHERE `be`.`participant_id` = '749' ORDER BY `id` DESC
Получаю результат:
Дальше мне нужно, соответственно, каждой паре id_выставки и номер места найти суммарное количество участников на данном месте в этой конкретной выставке. По простому можно сделать так:
SELECT COUNT(DISTINCT (`id`)) AS `count` FROM `b_exhibition` WHERE `exhibition_id` = 142372 AND `place_num` = 3
Хотела оптимизировать в один запрос, чтобы посчитать всех участников по всем выставкам, которые вместе с моим клиентом участвовали:
SELECT COUNT(DISTINCT (`id`)) AS `count` FROM `b_exhibition` WHERE `exhibition_id` AND `num_place` IN
(SELECT `be`.`exhibition_id` AS `exhibition_id`, `be`.`place_num` AS `num_place`
FROM `b_exhibition` AS `be`
WHERE `be`.`participant_id` = '749' ORDER BY `id` DESC)
Но sql выдает ошибку, что нельзя в подзапросе два поля.
Потом думала в сторону UNION ALL, но я не могу заранее знать по каждому клиенту в скольки он выставках участвовал, только если получать количество участия и динамически формировать запрос в цикле.
Знающие люди, направьте, пожалуйста, в какую сторону правильнее думать при решении моей задачи
Для нескольких полей правильный синтаксис такой:
...
WHERE (`exhibition_id`, `place_num`) IN
(SELECT `be`.`exhibition_id` AS `exhibition_id`,
`be`.`place_num` AS `num_place`
FROM `b_exhibition` AS `be`
WHERE `be`.`participant_id` = '749' ORDER BY `id` DESC)
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab