Убрать дубли при left join + оптимизация запроса - MySQL

Узнай цену своей работы

Формулировка задачи:

Есть запрос:
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)))
как правильно оптимизировать? сейчас дубли отсекаются с помощью distinct(product.id) (в таблице product_to_tag может быть один товар с нескольким тегами по этому дубли получались), но мне кажется distinct и group немножко нагружают систему + как то можно избавиться от этого `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)
)

Объяснение кода листинга программы

  1. В коде выполняется операция LEFT JOIN между двумя таблицами: product и product_to_tag.
  2. В скобках указаны значения, которые используются в запросе для выборки данных.
  3. Код фильтрует результаты запроса, оставляя только те записи, у которых значение столбца id присутствует в списке, полученном из таблицы product_to_tag.
  4. Список значений product_id формируется динамически на основе выборки из таблицы product_to_tag, где tag_id соответствует одному из указанных в скобках значений.
  5. Оператор IN проверяет наличие каждого product_id в списке значений, полученных из таблицы product_to_tag.
  6. Значения product_id берутся из столбца id таблицы product.
  7. Результатом запроса будет выборка из таблицы product, где значения столбца id присутствуют в списке, полученном из таблицы product_to_tag.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.8 из 5