2014-01-23 4 views
0
$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, у меня есть цикл использования, чтобы создать инструкцию и поместить в запрос, мой вопрос в том, что любой способ сделать это без цикла, поэтому я может сделать мой запрос более простым.mysql, проходящий массив в LIKE без цикла

+0

Вы можете вы 'дизъюнкцию в'. – user2936213

+0

'array_map' +' join' – deceze

ответ

1

Попробуйте

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

Выход

% LastName% ИЛИ% EMAIL% или% телефон%

См implode и str-replace

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' 
Смежные вопросы