@bagadjan

Как переделать запрос с OR на два запроса с UNION?

Привет всем знатокам.
Для увеличения скорости ответа, поменял запрос с OR по двум столбцам на два запроса с UNION. Проблема в ORDER BY
Запрос такого вида
SELECT  p.id,
		p.url,
		p.brand_id,
		p.name,
		p.JC,
		p.annotation,
		p.body,
		p.gallery360,
		p.position,
		p.created as created,
		p.visible, 
		p.featured, 
		p.views,
		p.meta_title, 
		p.meta_keywords, 
		p.meta_description, 
		b.name as brand,
		b.url as brand_url
FROM s_products p		

LEFT JOIN s_brands b ON p.brand_id = b.id

WHERE (p.name_clear IN ('A','B') OR p.JC IN ('A','B') )
AND (SELECT count(*)>0 FROM s_variants pv WHERE pv.product_id=p.id AND pv.price>0 AND (pv.stock IS NULL OR pv.stock>0) LIMIT 1) = 1
AND p.visible=1
	
ORDER BY p.position DESC
LIMIT 0, 40


Как переписать на два запроса с Union чтобы работал ORDER BY?
  • Вопрос задан
  • 62 просмотра
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Попробуйте, для начала, заменить зависимый подзапрос
AND (
  SELECT count(*)>0
  FROM s_variants pv
  WHERE pv.product_id=p.id AND pv.price>0
    AND (pv.stock IS NULL OR pv.stock>0) LIMIT 1
) = 1
на независимый
AND p.id IN (
  SELECT product_id
  FROM s_variants
  WHERE price > 0 AND (stock IS NULL OR stock > 0)
)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы