Оптимизация подзапросов MySQL Grouping - PullRequest
1 голос
/ 12 октября 2011

У меня есть таблица категорий и таблица продуктов.У продуктов есть category_id, а также maker_id.

Я пытаюсь вернуть таблицу названий категорий вместе с двоичным файлом того, содержит ли категория какие-либо продукты, принадлежащие данному $ maker_id (как определенов коде PHP).

Мой текущий метод подсчитывает, сколько подходящих товаров в каждой категории, но я предполагаю, что есть более быстрый путь, так как мне нужно только Да / Нет.Текущий код:

SELECT 
    c.name,
    SUM(CASE WHEN p.maker_id = '{$maker_id}' THEN 1 ELSE 0 END) AS already_used
FROM categories c
LEFT JOIN products p ON p.category_id = c.id
GROUP BY c.id

Я читаю об использовании EXISTS, но все примеры, которые я нашел, используют его в предложении WHERE.Спасибо!

1 Ответ

1 голос
/ 02 ноября 2015

Вы можете попробовать это:

SELECT c.name,COUNT(1) AS already_used, SUM(IF(p.status = 'ready', 1, 0)) AS ready_count 
FROM categories c 
LEFT JOIN products p 
ON  (p.category_id = c.id)
WHERE  p.maker_id = '{$maker_id}'
GROUP BY c.id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...