CodeIgniter数据库搜索
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CodeIgniter数据库搜索相关的知识,希望对你有一定的参考价值。
我有一个搜索表单,供员工用来搜索用户帐户。我希望搜索表单从用户那里获取输入并在数据库中搜索与其匹配的用户。这是我的数据库结构......
用户表 - >(id,fname,lname,ip_address ....等)
以下是我在模型中使用的搜索用户...
$this->db->or_like('fname', $query);
$this->db->or_like('lname', $query);
$this->db->or_like('email', $query);
$this->db->or_where('ip_address', $query);
$query = $this->db->get('users');
这适用于大多数搜索。例如....
搜索:比尔
返回所有用户名字或姓氏的用户.....
但是,即使有匹配的用户,搜索名字和姓氏也不会返回用户。例....
搜索:比尔盖茨
该搜索不会返回具有Bill的fname和盖茨的lname的用户。我能做些什么来完成这项工作?
答案
您必须将搜索字词按到多个单独的术语中。 CI将查询编写为:
WHERE fname LIKE '%Bill Gates%' OR lname LIKE '%Bill Gates%' etc...
永远不会匹配,因为'bill gates'永远不会出现在数据库的单个字段中。但是如果你将它分成多个单词(Bill
和Gates
)并将每个单词添加到单独的or
集中,你将获得匹配。
另一个选项,如果你正在使用MyISAM表,就是在3个字段中使用全文索引,这将找到“账单门”,即使账单是一个字段而门是在另一个字段中。
显然,对InnoDB的全文支持现在实际上终于在开发流程中,但是现在它仍然只在生产代码中使用myisam。
另一答案
由于您在数据库中拆分名字和姓氏并对两个or_like()调用使用相同的变量,因此您只能搜索一个单词。
您必须将字符串拆分为“”(空格)并为每个部分调用or_like()或使用具有3个单独输入字段的表单(更好的想法)。
以上是关于CodeIgniter数据库搜索的主要内容,如果未能解决你的问题,请参考以下文章