真的希望有人可以帮助我,或者至少指出我正确的方向。我在一个产品网站上工作,允许访问者使用产品结果旁边的菜单过滤他们的结果,类似于www.asos.com所做的。基本上,他们可以选择产品类型,样式,价格,适合...等。这些fiter类型中的每一个都有自己的表和一个引用表,它将每个值链接到products表。 EG有一个
带有productkey和所有其他产品信息的产品表 颜色表,包含以下字段,Colour_ID,Name Colourref表与productkey,Colour_ID
我正在使用MySQL和PHP。我知道如果访问者从每个过滤器类型中选择一个然后显示每个属性的计数,如何查询数据库并显示数据,但我真的希望能够允许它们进行多个选择然后计算每个属性的计数,基于已选择的内容。我已经研究了应该如何做,我已经看到子查询是一个选项,但我担心我需要创建多少个子查询,因为我有9个过滤器组,可以有大量的值。目前,数据库中有50万种产品,并且这种产品会随着时间的推移而增长。我正在捕获需要通过url查询的值,例如
页= 1&安培;图= 20&安培;产物= 125137147&安培;类型= 1,3,5&安培;颜色= 3,9,5&安培;材料= 187345
从示例中可以看出,每次都可以有多个值。我尝试使用AND编写查询。例如,product = 125 AND product = 137,但这不起作用。
有没有人对最佳方法有任何建议,即使它只是朝着正确的方向发展?
非常感谢任何帮助
先谢谢你
费雯丽
答案 0 :(得分:2)
基本上你已经回答了自己的问题:
SELECT ...
FROM ...
WHERE (product = 125 OR product = 137) AND
(colour = 3 OR colour = 8 OR colour = 5) ...
如果要选择多种产品,颜色等,则需要使用OR
代替AND
。
如果您同时需要产品和颜色,则需要在两者之间使用AND
组合。这里不需要子查询。
虽然使用IN
更容易:
SELECT ...
FROM ...
WHERE product IN (125, 137, 147) AND colour IN (3, 5, 8)
此SQL代码的更完整示例:
SELECT p.*
FROM Products p
LEFT JOIN Colourref cr
ON cr.productkey = p.productkey
LEFT JOIN Colours c
ON c.Colour_ID = cr.Colour_ID
WHERE
p.productkey IN (1, 2, 4)
AND c.Colour_ID IN (1, 2)
这将选择ID为1,2或4且颜色为1或2的所有产品。
它会在ID上加入所需的表格,然后过滤所需的值。