gpt4 book ai didi

mysql - 如何在按其中一个表过滤的同时从另一个表返回产品及其所有属性

转载 作者:行者123 更新时间:2023-11-29 03:13:17 25 4
gpt4 key购买 nike

我已经让我们的系统正确返回信息,但是我现在在应用过滤器时遇到返回信息的问题。有问题的查询是:

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"

不可能是真的,但我希望它是任何一个 child ,如果它只有 1 个过滤器,它工作正常,但多个“不同的”过滤器会损坏,

此外,它只会返回通过过滤器的相关属性。

我希望它返回已通过过滤器的产品的所有属性,我对此研究得越多,我就越认为这是不可能的。有人知道这样做的方法吗?

最佳答案

您需要在 HAVING 子句中编写逻辑,例如:

HAVING COUNT(IF(product_attributes.key = "color" AND product_attributes.value IN ("Red","Orange"),
1, NULL)) > 0
AND COUNT(IF( product_attributes.key = "size" AND product_attributes.value IN ( "L","M" ),
1, NULL)) > 0

关于mysql - 如何在按其中一个表过滤的同时从另一个表返回产品及其所有属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4840881/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com