我有一个搜索表单,供员工用来搜索用户帐户。我希望搜索表单从用户那里获取输入并在数据库中搜索与其匹配的用户。这是我的数据库结构......
用户表 - > (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的用户。我能做些什么才能做到这一点?
答案 0 :(得分:6)
您必须将搜索字词按到多个单独的字词中。 CI将查询编写为:
WHERE fname LIKE '%Bill Gates%' OR lname LIKE '%Bill Gates%' etc...
永远不会匹配,因为'bill gates'永远不会出现在数据库的单个字段中。但是,如果您将其拆分为多个单词(Bill
和Gates
)并将每个单词单独添加到or
集,您将获得匹配。
另一个选项,如果你正在使用MyISAM表,就是在3个字段中使用全文索引,即使bill是一个字段而gate也在另一个字段中,它们会找到'bill gates'。
显然,对InnoDB的全文支持现在实际上终于在开发流程中,但是现在它仍然只在生产代码中使用myisam。
答案 1 :(得分:0)
由于您在数据库中拆分名字和姓氏并对两个or_like()调用使用相同的变量,因此您只能搜索一个单词。
您必须将字符串拆分为“”(空格)并为每个部分调用or_like()或使用包含3个单独输入字段的表单(不过更好的想法)。