SQL查询基于逗号分隔值的条件?

时间:2012-10-03 03:35:01

标签: php mysql

  

可能重复:
  MySQL Select Multiple VALUES

让我说我有一组数字像(3,2,5)我用来分割它们的正常方式和搜索mysql来获取价值就是在PHP中使用explode来拆分它们

实施例

$string = '3,4,5';
$array = explode(',',$string);
foreach($array as $value){
    $query = 'SELECT ID FROM TABLE WHERE ID = "'.$value.'"';
}

它的工作方式与此类似,但它使脚本非常慢

我现在需要把这个字符串拆分成自己的查询并返回结果而不用PHP循环?

4 个答案:

答案 0 :(得分:3)

使用IN

$string = '3,4,5';
$query = "SELECT ID FROM TABLE WHERE ID IN ($string)";

答案 1 :(得分:2)

为什么不是WHERE ... IN ...

select ID from TABLE where ID in (3,4,5)

答案 2 :(得分:1)

如果你的$ string变量是:

$string = '3,4,5';

尝试构建您的查询:

$query = 'SELECT ID FROM TABLE WHERE ID in (".$string.")';

你不需要循环。

答案 3 :(得分:0)

您可以使用IN运算符。

另外,请确保应用正确的转义(在这种情况下,它应该无关紧要,但是当通过网络请求提交字段时它会这样做):

$string = '3,4,5';
$array = explode(',', $string);

// cast all array elements into integers
$numbers = join(',', array_map('intval', $array));

$query = "SELECT ID FROM TABLE WHERE ID IN ($numbers)";

另一种奇特的方法是使用准备好的陈述:

$placeholders = join(',', array_fill(0, count($array), '?'));
$query = "SELECT ID FROM TABLE WHERE ID IN ($placeholders)";

然后执行查询,你会绑定数字(PDO示例):

// prepare the query, looks like 'WHERE ID IN (?,?,?)'
$stmt = $db->prepare($query);
// execute the query and pass the array values
$stmt->execute($array);