mysql将数组传递给LIKE而没有循环

时间:2014-01-23 06:59:28

标签: php mysql

$serach=array('abc','def','ghi');

$num=count($search);
for($n=0, $n<$num, $n++){
  $sql .= LIKE % $search[$n] % OR ;
}
$sql=substr_replace($sql,"",-3);//REMOVE LAST OR


SELECT * FROM store_main WHERE name :sql...

我需要将一个数组传递给查询LIKE,我已经使用循环来创建语句并放入查询,我的问题是,有没有循环的任何方式,所以我可以使我的查询更简单。

2 个答案:

答案 0 :(得分:1)

像这样使用implode

$serach = array('abc', 'def', 'ghi');
$sql .= "`name` LIKE '%" . implode("%' OR `name` LIKE '%", $serach) . "%' ";

产生

`name` LIKE '%abc%' OR `name` LIKE '%def%' OR `name` LIKE '%ghi%'

或者您可以使用REGEXP。根据您拥有的阵列元素数量和/或表/数据库的效率,这个可能会慢一些。

$serach = array('abc', 'def', 'ghi');
$sql .= "`name` REGEXP '" . implode("|" $serach) . "' ";

产生

`name` REGEXP 'abc|def|ghi'

答案 1 :(得分:1)

尝试

$array = array('lastname', 'email', 'phone');
echo "%".str_replace(",","% OR %",implode(",", $array))."%";

<强>输出

  

%lastname%OR%email%OR%phone%

参考 implodestr-replace