如何查询多个关键字的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 查询