真心希望有人能帮助我,或者至少为我指明正确的方向。我在一个产品网站上工作,该网站允许访问者使用产品结果一侧的菜单来过滤他们的结果,类似于 www.asos.com 所做的。基本上,他们可以选择产品类型、款式、价格、款式等。每种款式都有自己的表格和引用表,将每个值链接到产品表。 EG 有一个
包含产品 key 和所有其他产品信息的产品表 颜色表,具有以下字段:Colour_ID、名称 带有产品 key 、Colour_ID 的 Colorref 表
我正在使用 MySQL 和 PHP。我知道如果访问者从每种过滤器类型中进行一项选择,然后显示每个属性的计数,如何查询数据库并显示数据,但我真的希望能够允许他们进行多项选择,然后计算基于所选内容的每个属性的计数。我已经研究过应该如何完成此操作,并且我发现子查询是一种选择,但我担心需要创建多少子查询,因为我有 9 个过滤器组,这些过滤器组可以有大量值(value)观。目前,数据库中有二分之一的产品,并且这个数字会随着时间的推移而增长。我正在捕获需要通过 url 查询的值,作为示例
page=1&view=20&product=125,137,147&type=1,3,5&colour=3,9,5&material=187,345
正如您从示例中看到的,我每次都可以有多个值。我尝试使用 AND 编写查询。例如,产品 = 125 AND 产品 = 137,但这不起作用。
有人对执行此操作的最佳方法有任何建议,即使这只是正确方向的一个点?
任何帮助将不胜感激
提前谢谢您
薇薇安
最佳答案
基本上你已经回答了你自己的问题:
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 上左连接所需的表,然后过滤所需的值。
关于php - 表中同一字段的多个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9343157/