Mysql Выбор производителей из товаров всех подкатегорий заданной категории

achyorny

Новичок
все работает, выбирает производителей из всех товаров всех подкатегорий категории id=1 как надо!
но, помогите, пожалуйста, упростить этот запрос, если возможно
PHP:
SELECT *
	FROM `oc_manufacturer`
	WHERE `manufacturer_id` IN (
		SELECT `manufacturer_id`
			FROM `oc_product` p
			INNER JOIN `oc_product_to_category` pc ON ( p.`product_id` = pc.`product_id` )
			INNER JOIN (
				SELECT *
					FROM `oc_category`
					WHERE `category_id` =1 OR `parent_id` =1
			) c ON ( pc.`category_id` = c.`category_id` )
	)
Opencart
таблицы примерно такие
oc_manufacturer — manufacturer_id, name...
oc_product — product_id, manufacturer_id....
oc_product_to_category — product_id, category_id....
oc_category — category_id, parent_id...
 

Gas

может по одной?
можно и без вложеных запросов обойтись, просто джойнами, как-то так

PHP:
select m.*
from oc_category as c
join `oc_product_to_category` as pc on pc.`category_id`=c.`category_id`
join oc_product as p on p.`product_id` = pc.`product_id`
join `oc_manufacturer` as m on p.`manufacturer_id`=m.`manufacturer_id`
where c.`category_id` =1 OR c.`parent_id` =1
group by m.`manufacturer_id`
 

Gas

может по одной?
работать то может и работает, а лучше ли и на сколько, это интересно.
ответ и будет благодарностью )
 

achyorny

Новичок
твой Запрос занял 0.0050 сек.
а мой Запрос занял 0.0005 сек.
это в PHPMyAdmin
как вообще его протестить грамотно?
 

Gas

может по одной?
как вообще его протестить грамотно?
наверное не супер грамотно, но я делаю так:
1. добавить SQL_NO_CACHE сразу после select'а
2. выполнить запрос подряд 3-4 раза, время первого запуска проигнорировать, а на глазок прикинуть среднее время других выполнений.

это будет примерное время выполнения запроса когда все необходимые данные (не результат выполнения) есть в кеше os/mysql, а время запроса без "прогретого" кеша очень сильно отличается от раза к разу, чтоб его с чем-то сравнивать.
 
Сверху