Убрать дубли при left join + оптимизация запроса - MySQL
Формулировка задачи:
Есть запрос:
как правильно оптимизировать? сейчас дубли отсекаются с помощью distinct(product.id) (в таблице product_to_tag может быть один товар с нескольким тегами по этому дубли получались), но мне кажется distinct и group немножко нагружают систему + как то можно избавиться от этого `p2t`.`tag_id` IN (14, 30, 37, 500) и написать по другому
SELECT COUNT(DISTINCT(product.id)) FROM `product` JOIN `product_to_tag` `p2t` ON product.id = p2t.product_id JOIN `product_to_city` `ptc` ON product.id = ptc.product_id JOIN `city` `c` ON c.id = ptc.city_id LEFT JOIN `city` `city` ON city.id=product.city_id LEFT JOIN `company` ON company.id=product.company_id WHERE ((((`product`.`id` IN ( SELECT product_id FROM product_to_city JOIN city ON (city.id = product_to_city.city_id) WHERE city.id = 1 OR city.parent_id = 1 )))) AND (`product`.`publish` = 1 )) AND (product.id != 513568) AND (c.id = 1 OR c.parent_id = 1) AND ((`p2t`.`tag_id` IN (14, 30, 37, 500)))
Решение задачи: «Убрать дубли при left join + оптимизация запроса»
textual
Листинг программы
AND`product`.`id` IN ( * SELECT product_id *FROM product_to_tag WHERE tag_id IN (14, 30, 37, 500) )
Объяснение кода листинга программы
- В коде выполняется операция
LEFT JOIN
между двумя таблицами:product
иproduct_to_tag
. - В скобках указаны значения, которые используются в запросе для выборки данных.
- Код фильтрует результаты запроса, оставляя только те записи, у которых значение столбца
id
присутствует в списке, полученном из таблицыproduct_to_tag
. - Список значений
product_id
формируется динамически на основе выборки из таблицыproduct_to_tag
, гдеtag_id
соответствует одному из указанных в скобках значений. - Оператор
IN
проверяет наличие каждогоproduct_id
в списке значений, полученных из таблицыproduct_to_tag
. - Значения
product_id
берутся из столбцаid
таблицыproduct
. - Результатом запроса будет выборка из таблицы
product
, где значения столбцаid
присутствуют в списке, полученном из таблицыproduct_to_tag
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д