过滤一列上的多个值。所有值必须存在,否则 - 返回零

时间:2011-01-02 20:38:29

标签: php sql mysql

我想过滤一个表中的一列用于几个值,并且仅当所有这些值都存在时才显示结果。如果缺少一个或多个,则返回零结果。

示例表

+----+--------+----------+
| id | Fruit  | Color    | 
+----+--------+----------+
| 1  | apple  | red      | 
| 2  | mango  | yellow   | 
| 3  | banana | yellow   | 
+----+--------+----------+

示例“错误”代码:(这必须返回3行)

select Fruit FROM table WHERE Color = red AND Color = yellow

select Fruit FROM table WHERE Color = red AND Color = green

必须返回0行。

(如果我使用select Fruit FROM table WHERE Color = red OR Color = green我得到1行,这不是我需要的)

我正在使用带有表单的PHP,其中用户检查表示同一列的不同值的不同复选框。因此,当他选择多个复选框时,所有这些值都应该在结果集中,否则不应该给出结果。

谢谢,

安德鲁

1 个答案:

答案 0 :(得分:3)

试试这个:

SELECT Fruit
FROM yourtable
WHERE Color IN ('red', 'yellow')
AND (
    SELECT COUNT(DISTINCT Color)
    FROM yourtable
    WHERE Color IN ('red', 'yellow')
) = 2

另一种选择:

SELECT Fruit FROM yourtable
WHERE Color IN ('red', 'yellow')
AND EXISTS (SELECT NULL FROM yourtable WHERE Color = 'red')
AND EXISTS (SELECT NULL FROM yourtable WHERE Color = 'yellow')