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

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

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

Есть запрос:
Листинг программы
  1. SELECT COUNT(DISTINCT(product.id))
  2. FROM `product`
  3. JOIN `product_to_tag` `p2t` ON product.id = p2t.product_id
  4. JOIN `product_to_city` `ptc` ON product.id = ptc.product_id
  5. JOIN `city` `c` ON c.id = ptc.city_id
  6. LEFT JOIN `city` `city` ON city.id=product.city_id
  7. LEFT JOIN `company` ON company.id=product.company_id
  8. WHERE ((((`product`.`id` IN (
  9. SELECT product_id FROM product_to_city
  10. JOIN city ON (city.id = product_to_city.city_id)
  11. WHERE city.id = 1 OR city.parent_id = 1
  12. )))) 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
Листинг программы
  1. AND`product`.`id` IN (
  2. * SELECT product_id *FROM product_to_tag WHERE tag_id IN (14, 30, 37, 500)
  3. )

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут