如何避免mysql查询中的许多OR语句?

时间:2012-09-27 07:08:27

标签: php mysql

我正在编写一个代码,我必须使用许多OR语句生成一个查询,我认为有一种比这更简单的方法:

foreach ($plz as &$value) {
    if (empty($i)) {
        $query = "WHERE plz='$value'";
    } else {
        $query = "$query OR plz='$value'";
    }
    $i++;
}
$sql = mysql_query("SELECT * FROM table $query");
while ($data = mysql_fetch_array($sql)) {
    //do something
}

3 个答案:

答案 0 :(得分:2)

你正在寻找;

SELECT * FROM table WHERE plz in ('value1', 'value2', 'value3')

请注意SQL injections ...

答案 1 :(得分:2)

如果列可能有多个值,只需使用IN运算符连接它们:

而不是写

... WHERE col=1 OR col=2 OR col=3

写一下

... WHERE col IN (1,2,3)

要收集PHP中的所有条目,请稍后使用数组和implode()

// collecting values
$vals = array();
$vals[] = 1;
$vals[] = 2;
// ...

// add them to your query
$query .= ' WHERE col IN ( ' . implode( ',', $vals ) . ')';

// execute the query ...

如果您的值不是整数,但需要用查询中的撇号括起来,那么首先将它们插入到数组中:

$vals[] = "'my string value'";

答案 2 :(得分:1)

如果列plz是INT类型,并且所有$plz也是整数,那么:

$query = 'WHERE plz IN( ' . implode(',', $plz) . ')';

会奏效。否则,尝试这可能会起作用(未经测试):

$query = 'WHERE plz IN( \'' . implode("','", $plz) . '\')';