MYSQL - 选择值等于any的元素

时间:2014-03-26 08:26:03

标签: php mysql

想象一个简单的查询,其中$value是一个布尔变量:

"SELECT * FROM table where table.value = {$value}";

可以轻松过滤$value等于true或等于false的选择。

问题是:如何在同一查询中按任意(truefalse)进行过滤?

2 个答案:

答案 0 :(得分:1)

值集和比较

某个数据类型的字段可以采用某些值集(ENUM是非常好的示例,但不仅仅是示例)。因此,如果您想通过某些子集值进行比较,可以使用IN

SELECT * FROM t WHERE v IN ($values)

此处$values代表 set 的值,而不是一个值。值集由逗号分隔,因此,如果您有数组:

$values = [1, 2, 5];

然后你需要查询:

//values escaping is needed, but out of this issue:
$query = 'SELECT * FROM t WHERE v IN ('.join(',', $values).')';

此外,字符串文字必须用引号括起来 - 因此,上面的构造应该为它们修改如下:

$values = ['foo', 'bar'];
$inSet  = array_map(function($x)
{
   return '"'.$x.'"';
}, $values);
$query = 'SELECT * FROM t WHERE v IN ('.join(',', $inSet).')';

当前案例

然而,有一种情况是上面的比较不再需要。这就像你的问题。在您的情况下,您的数据类型全集等于比较值的子集。因此,整个条件毫无意义 - 因为数据类型不能保留任何全部值。因此,您可以完全忽略您的条件,也可以离开WHERE 1(如果必须WHERE)。

答案 1 :(得分:0)

SELECT * FROM tablе;
SELECT * FROM table where value = 0 OR value = 1;
SELECT * FROM table where (value = 0 OR value = 1) -- AND (other where conditions); (remove -- to uncomment)