首页 > 解决方案 > mysql加入多个where

问题描述

我有一个 sql 查询。Where 子句有点棘手,因为我需要它来告诉 fv.position 应该大于一个数字,而 id_feature 应该是一个特定的数字,但仅限于该状态。所以可能有多个这样的堆栈。

到目前为止,这是我想出的:

SELECT
    *
FROM
    psx_product p
INNER JOIN
    psx_feature_product fp ON fp.id_product = p.id_product
INNER JOIN
    psx_feature_value fv ON fp.`id_feature_value` = fv.`id_feature_value`
WHERE 
    (fv.position > 0 AND fp.id_feature = 6)
AND
    (fv.position > 5 AND fp.id_feature = 7)
AND
    (fv.position > 2 AND fp.id_feature = 8)

但是我认为上面的例子是错误的处理方式,因为 fv.position 不知道它只连接到 perentesis 中的特征,并且堆叠 where 语句,只是给出空结果,where,一个给出结果. 这应该如何正确完成?

标签: phpmysqljoin

解决方案


如果我理解正确,您在 where 子句中需要案例之间的 OR,而不是 AND,显然一个字段不能同时等于 2 个不同的值

如果有公式可以设置 fv.position 和 fp.id_feature 的参数,那么你可以保存所有的具体条件,写一个具体的。

    SELECT * FROM psx_product p
 INNER JOIN psx_feature_product fp ON fp.id_product = p.id_product
 INNER JOIN psx_feature_value fv ON fp.`id_feature_value` = fv.`id_feature_value` WHERE
 (fv.position > 0 AND fp.id_feature = 6) OR
 (fv.position > 5 AND fp.id_feature = 7) OR
 (fv.position > 2 AND fp.id_feature = 8)

推荐阅读