gpt4 book ai didi

php - 购物车-多个属性值

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

我有以下产品和购物车表格:

//产品表

Products:

id | Product_value
-----------------------
1 | Product 1


Attributes:

id | Attribute_value
-----------------
1 | Color
2 | Size


Attribute_values:

id | Attribute_id | Value_value
---------------------------------
1 | 1 | Black
2 | 1 | Red
3 | 1 | Blue
4 | 2 | S
5 | 2 | M
6 | 2 | L
7 | 2 | XL

Product_attribute_values

Product_id | Attribute_id | Value_id
--------------------------------------
1 | 1 | 1
1 | 1 | 2
1 | 1 | 3
1 | 2 | 4
1 | 2 | 5
1 | 2 | 6
1 | 2 | 7

//数据库表

Cart:

id | product_id | number_value
----------------------------------
1 | 1 | 1
2 | 1 | 1

Product_attribute_value:

Cart_id | attribute_id | value_id
--------------------------------------
1 | 1 | 1
1 | 2 | 4
2 | 1 | 2
2 | 2 | 5

所以:

  • 客户想要黑色 S 码的产品 1
  • 客户想要红色 M 码的产品 1

一个产品可以包含多个属性值。

通过使用 AJAX->JSON 在购物车中添加产品,我有以下数据:

- productid
- number
- attribute= array( // example: color
attribute_id
value_id
)
- attribute= array( // example: size
attribute_id
value_id
)

通过哪个查询(PDO)我可以查看该组合是否已经存在?如果存在,我想更改该产品的编号

在'How to find all the products with specific multi attribute values '他们使用“存在”。我如何使用 PDO 和无限属性来做到这一点(可以有更多,而不仅仅是颜色和尺寸,但不是每个产品都有属性)。

最佳答案

“经典”SQL 方法将要求您对每个属性过滤器执行JOIN子查询。因此,如果您需要通过 5 个过滤器(属性值)查找产品,则需要创建一个具有 5 个 JOIN 或子查询的 SQL 查询。与问题相同,您发布了链接。

您可能会猜到,这根本不可扩展。

所以,我想提供一种不同的,但有点“草率”的方式。您可以对 products_attribute_values 表进行查询并获取如下对:

ProductID此产品匹配多少个属性/过滤器

这是一个查询:

SELECT product_id, COUNT(*) AS `attributes_matching` FROM Product_attribute_values
WHERE
Attribute_id1=Value1 // example: color
AND
Attribute_id2=Value2 // example: size
AND
Attribute_id3=Value3 // example: for-man/women/kid
AND
Attribute_id4=Value4 // example: Manufacturer
AND
Attribute_id5=Value5 // example: Material
GROUP BY product_id

一般来说,您可以使用此attributes_matching值作为搜索排名值,您可以通过它进行排序和过滤。例如,在上面的示例中,如果没有匹配到所有 5 个过滤器,您可以显示匹配 4 个过滤器的产品。

如果您想获取匹配所有 5 个过滤器(严格过滤)的产品,您只需在查询末尾添加 HAVING 即可:

...
AND
Attribute_id5=Value5 // example: Material
GROUP BY product_id
HAVING attributes_matching=5 // 5 - number of filters in this case

关于php - 购物车-多个属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27656403/

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