首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >数组中的SQL LIKE %

数组中的SQL LIKE %
EN

Stack Overflow用户
提问于 2012-02-23 23:31:13
回答 9查看 56.5K关注 0票数 24

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

代码语言:javascript
复制
SELECT * FROM users WHERE name LIKE %tom%;

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

代码语言:javascript
复制
$words = array("Tom", "Smith", "Larry");

如何执行SQL LIKE%来搜索数组中的单词,如下所示:

代码语言:javascript
复制
SELECT * FROM users WHERE name LIKE %[each_element_from_my_array]%

而不是将整个查询放在foreach循环或其他什么东西中

编辑:我忘了提到我是在cakePHP的cakePHP find(‘’)方法的条件中做这件事的,所以这让事情有点复杂。

谢谢

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2012-02-23 23:35:00

代码语言:javascript
复制
$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代码:

代码语言:javascript
复制
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

票数 33
EN

Stack Overflow用户

发布于 2012-02-23 23:36:31

对于标准SQL,它将是:

代码语言:javascript
复制
SELECT * FROM users WHERE name LIKE '%tom%' 
                       OR name LIKE '%smith%' 
                       OR name LIKE '%larry%';

由于您使用的是MySQL,因此可以使用RLIKE (a.k.a. REGEXP)

代码语言:javascript
复制
SELECT * FROM users WHERE name RLIKE 'tom|smith|larry';
票数 21
EN

Stack Overflow用户

发布于 2012-02-23 23:34:35

你不能。它必须是一个链式的field like %..% or field like %..% or ...where ... in子句只提取字符串匹配,不支持通配符。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9416062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档