Я заставил нашу систему возвращать информацию правильно, однако теперь у меня есть проблема с возвратом информации, когда мы применяем фильтры. рассматриваемый запрос:
SELECT `products`.*
CONCAT( '[', GROUP_CONCAT( DISTINCT '{', '"id":"', `product_variations`.`id`, '"', ',', '"id_product":"', `product_variations`.`id_product`, '"', ',', '"sku":"', `product_variations`.`sku`, '"', ',', '"options":"', `product_variations`.`options`, '"', ',', '"quantity":"', `product_variations`.`quantity`, '"', ',', '"price":"', `product_variations`.`price`, '"', '}' SEPARATOR ',' ), ']' ) as `_variations`,
CONCAT( '[', GROUP_CONCAT( DISTINCT '{', '"id":"', `product_images`.`id`, '"', ',', '"id_product":"', `product_images`.`id_product`, '"', ',', '"location":"', `product_images`.`location`, '"', ',', '"order":"', `product_images`.`order`, '"', ',', '"variation_key":"', `product_images`.`variation_key`, '"', ',', '"variation_values":"', `product_images`.`variation_values`, '"', '}' SEPARATOR ',' ), ']' ) as `_images`,
CONCAT( '[', GROUP_CONCAT( DISTINCT '{', '"id":"', `product_attributes`.`id`, '"', ',', '"id_product":"', `product_attributes`.`id_product`, '"', ',', '"key":"', `product_attributes`.`key`, '"', ',', '"value":"', `product_attributes`.`value`, '"', '}' SEPARATOR ',' ), ']' ) as `_attributes`
FROM (`products`)
LEFT JOIN product_variations ON products.id = product_variations.id_product
LEFT JOIN product_images ON products.id = product_images.id_product
LEFT JOIN product_attributes ON products.id = product_attributes.id_product
WHERE ( `products`.`id_category` = "11" OR `products`.`id_category` = "12" OR `products`.`id_category` = "9" )
AND ( product_attributes.key = "color" AND product_attributes.value IN ( "Red","Orange" ) )
AND ( product_attributes.key = "size" AND product_attributes.value IN ( "L","M" ) )
GROUP BY `products`.`id`
LIMIT 10
Игнорирование вещей CONCAT (которые возвращают атрибуты и т. Д. В виде данных json), что я пытаюсь заставить работать, например, если продукт имеет следующие атрибуты:
color=Red
color=Orange
color=Blue
size=L
size=M
size=S
, так что если я хочу отобразить продукты, где
color=Red OR color=Orange
AND
size=L OR size=M
этот товар будет возвращен,
проблема явно заключается в том, что
AND ( product_attributes.key = "color"
AND ( product_attributes.key = "size"
не может быть правдой, но я хочу, чтобы это было ЛЮБОЕ из дочерних элементов, если это только 1 фильтр, он работает нормально, но несколько «разных» фильтров и он ломается,
также он будет возвращать только те атрибуты, о которых идет речь, которые прошли фильтр.
Я хотел бы, чтобы он возвращал ВСЕ атрибуты для продукта, который прошел фильтр, чем больше я смотрю на это, тем больше я думаю, что это невозможно. Кто-нибудь знает способ сделать это?