SQL LIKE % in array

2022-08-30 15:57:30

我知道如何对单个值执行SQL LIKE %查询,如下所示:

SELECT * FROM users WHERE name LIKE %tom%;

但是,如果我的 LIKE 的搜索词来自数组,我该怎么做?例如,假设我们有一个这样的数组:

$words = array("Tom", "Smith", "Larry");

我如何执行我的SQL LIKE %来搜索数组中的单词,例如:

SELECT * FROM users WHERE name LIKE %[each_element_from_my_array]%

无需将整个查询放在 foreach 循环或其他内容中

编辑:我忘了提到我在cakePHP中这样做,在cakePHP find('all')方法的条件下,所以这让事情变得有点复杂。

谢谢


答案 1
$sql = array('0'); // Stop errors when $words is empty

foreach($words as $word){
    $sql[] = 'name LIKE %'.$word.'%'
}

$sql = 'SELECT * FROM users WHERE '.implode(" OR ", $sql);

编辑:CakePHP的代码:

foreach($words as $word){
    $sql[] = array('Model.name LIKE' => '%'.$word.'%');
}

$this->Model->find('all', array(
    'conditions' => array(
        'OR' => $sql
    )
));

阅读这个东西:http://book.cakephp.org/1.3/en/view/1030/Complex-Find-Conditions


答案 2

在标准SQL的情况下,它将是:

SELECT * FROM users WHERE name LIKE '%tom%' 
                       OR name LIKE '%smith%' 
                       OR name LIKE '%larry%';

由于您使用的是MySQL,因此可以使用RLIKE(又名REGEXP

SELECT * FROM users WHERE name RLIKE 'tom|smith|larry';

推荐