我知道如何对单个值执行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(‘’)方法的条件中做这件事的,所以这让事情有点复杂。
谢谢
发布于 2012-02-23 23:35:00
$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
发布于 2012-02-23 23:36:31
对于标准SQL,它将是:
SELECT * FROM users WHERE name LIKE '%tom%'
OR name LIKE '%smith%'
OR name LIKE '%larry%';
由于您使用的是MySQL,因此可以使用RLIKE
(a.k.a. REGEXP
)
SELECT * FROM users WHERE name RLIKE 'tom|smith|larry';
发布于 2012-02-23 23:34:35
你不能。它必须是一个链式的field like %..% or field like %..% or ...
。where ... in
子句只提取字符串匹配,不支持通配符。
https://stackoverflow.com/questions/9416062
复制相似问题