【问题标题】:CodeIgniter Database SearchCodeIgniter 数据库搜索
【发布时间】:2011-09-21 20:31:09
【问题描述】:

我有一个搜索表单,工作人员使用它来搜索用户帐户。我希望搜索表单从用户那里获取输入并在数据库中搜索与之匹配的用户。这是我的数据库结构...

用户表 -> (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 为 Bill 且 lname 为 Gates 的用户。我可以做些什么来完成这项工作?

【问题讨论】:

    标签: php codeigniter search


    【解决方案1】:

    您必须将搜索字词按摩成多个单独的字词。 CI 会将查询写成:

    WHERE fname LIKE '%Bill Gates%' OR lname LIKE '%Bill Gates%' etc...
    

    这永远不会匹配,因为 'bill Gates' 永远不会出现在数据库的单个字段中。但是,如果将其拆分为多个单词(BillGates)并将每个单词分别添加到 or 集合中,您将获得匹配项。

    如果您使用的是 MyISAM 表,另一种选择是使用跨 3 个字段的全文索引,这将找到“bill gates”,即使 bill 是一个字段而 gates 在另一个字段中。

    显然,对 InnoDB 的全文支持现在终于进入了开发流程,但目前它仍然只在生产代码中提供 myisam。

    【讨论】:

      【解决方案2】:

      由于您在数据库中拆分了名字和姓氏,并为两个 or_like() 调用使用了相同的变量,因此您只能搜索一个单词。

      您必须在“”(空格)处拆分字符串并为每个部分调用 or_like() 或使用具有 3 个单独输入字段的表单(恕我直言更好的主意)。

      【讨论】:

        猜你喜欢
        • 2017-12-26
        • 1970-01-01
        • 2017-06-04
        • 1970-01-01
        • 1970-01-01
        • 2015-03-23
        • 2019-11-05
        • 2016-07-27
        相关资源
        最近更新 更多