如何查询多个关键字的like

Posted

技术标签:

【中文标题】如何查询多个关键字的like【英文标题】:how to query like for more than one keyword 【发布时间】:2014-08-30 00:28:13 【问题描述】:

我有一个查询来搜索内容表以查找带有一些关键字的行。(codeigniter)

我有一列存储关键字(省名)。

我有一个主要省份和相关省份,我应该搜索它们。

我有一个关键字数组,但不清楚它有多少索引。

那么如何使用多个关键字搜索内容

这是我在模型中的查询

public function province($province_name,$provinces_name,$language)

    $ps_name = str_replace("-", " ", $provinces_name);
    $lang=$language;

    $data = $this->db
                 ->select('*')
                 ->from('content')
                 ->where("language",$lang)
                 ->where("keywords",$province_name)
                 ->or_like("keywords","%$ps_name%")
                 ->limit("14")
                 ->order_by("id","DESC")
                 ->get();

    if ($data->num_rows > 0) 
        return $data->result();
     else
        return false;
    

【问题讨论】:

【参考方案1】:

如果您有一组关键字,并且希望一次搜索每个关键字,则可以在循环中使用 $this->db->or_like()。试试下面的代码:

$keywords = array("keyword1",
                  "keyword2",
                  "keyword3",
             );

foreach($keywords as $k)

    $this->db->or_like("keywords", $k);


$this->db->where("language", $lang);
$this->db->limit("14");
$this->db->order_by("id", "DESC");
$query = $this->db->get("content");

【讨论】:

但是如何使用 foreach 进入查询? ->select('*') ->from('noor_content') foreach($provinces_name as $k) ->or_like("keywords", $k); ->where("language",$lang) ->where("keywords",$province_name) ->limit("14") ->order_by("id","DESC") ->get(); 目前您正在使用链接方法来构建查询。您可以像我上面所做的那样中断您的查询。循环通过or_like 将创建一个or_like-wildcards-keyword 链。【参考方案2】:

不确定 CI 的具体实现,但如果您正在使用多个关键字执行类似搜索的功能,您可以查看 mysql's full-text search(适用于 InnoDB 或 MyIASM)。或者一个不错的教程here。

【讨论】:

以上是关于如何查询多个关键字的like的主要内容,如果未能解决你的问题,请参考以下文章

使用 PDO 准备语句从搜索字段中使用多个关键字进行 LIKE 查询

如何在 Grafana 的 MySQL 查询中使用 like?

oracle like模糊查询简单用法

mysql如何使用like关键字实现模糊查询?有啥注意事项

使用关键字like进行模糊查询

如何提高oracle模糊查询的性能?