我有一个搜索表单,工作人员用它来搜索用户帐户。我希望搜索表单获取用户的输入并在数据库中搜索与其匹配的用户。 这是我的数据库结构...
用户表 ->(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');
这对于大多数搜索都很有效。 例如......
搜索:比尔
返回具有帐单名字或姓氏的所有用户.....
但是,即使存在匹配的用户,搜索名字和姓氏也不会返回用户。 例子....
搜索:比尔·盖茨
该搜索不会返回 fname 为 Bill 和 lname 为 Gates 的用户。 我该怎么做才能让这项工作成功?
您必须将搜索词分解为多个单独的词。 CI 会将查询写为:
WHERE fname LIKE '%Bill Gates%' OR lname LIKE '%Bill Gates%' etc...
这永远不会匹配,因为“比尔盖茨”永远不会出现在数据库的单个字段中。但是,如果您将其拆分为多个单词(
Bill
和 Gates
)并将每个单词单独添加到 or
集中,您将获得匹配项。
如果您使用 MyISAM 表,另一种选择是在 3 个字段中使用全文索引,这将找到“bill Gates”,即使 bill 是一个字段而 Gates 在另一个字段中。
显然,对 InnoDB 的全文支持现在实际上终于进入了开发流程,但目前它仍然仅在生产代码中为 myisam。
由于您在数据库中拆分了名字和姓氏,并在两个 or_like() 调用中使用相同的变量,因此您只能搜索一个单词。
您必须在“”(空格)处拆分字符串,并为每个部分调用 or_like() 或使用具有 3 个独立输入字段的表单(恕我直言,这是更好的主意)。