想象一个简单的查询,其中$value
是一个布尔变量:
"SELECT * FROM table where table.value = {$value}";
过滤
$value
等于true
或等于false
的选择很容易。问题是:如何在同一查询中按ANY(
true
或false
)过滤? 最佳答案
一组值和比较
有一些数据类型的字段可以采用一组值(ENUM
是很好的例子,但不仅是例子)。因此,如果要按某些值子集进行比较,则可以使用IN
:
SELECT * FROM t WHERE v IN ($values)
在这里
$values
代表一组值,而不是一个值。值集由逗号分隔,因此,如果您有数组:$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
)。关于php - MYSQL-选择值等于任何值的元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22655174/