想象一个简单的查询,其中$value
是一个布尔变量:
"SELECT * FROM table where table.value = {$value}";
可以轻松过滤$value
等于true
或等于false
的选择。
问题是:如何在同一查询中按任意(true
或false
)进行过滤?
答案 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)