php - 表中同一字段的多个查询

标签 php mysql

真心希望有人能帮助我,或者至少为我指明正确的方向。我在一个产品网站上工作,该网站允许访问者使用产品结果一侧的菜单来过滤他们的结果,类似于 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/

相关文章:

mysql - 将具有相同主键的两个表规范化为 3NF

mysql - Gammu 错误插入收件箱

php - 使用 PDO 将数组放入 IN 子句中的解决方案

php - 我无法使用 android 更新服务器上的 mysql 数据库

php - codeigniter 对子文件夹内的所有内容返回 404

php - cURL 连接到 https 页面

php - 方法返回值不一致

PHP : parse html : extract script tags from body and inject before </body>?

javascript - 使用 jQuery 和 AJAX 提交回复后更新收件箱

php - 如何检索18 :30:00 in php之后的记录