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

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


过滤$value等于true或等于false的选择很容易。

问题是:如何在同一查询中按ANY(truefalse)过滤?

最佳答案

一组值和比较

有一些数据类型的字段可以采用一组值(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/

10-13 05:31