You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CodeIgniter书店项目多词搜索功能异常修复咨询

解决CodeIgniter多词搜索无结果的问题

我懂你的困扰——单关键词搜索正常工作,但输入多词组合(比如“PHP BOOKS”)就没结果,你想要的是只要书名包含任意一个搜索关键词就返回对应书籍对吧?

问题根源

你当前的模型代码里,$this->db->like('book_name', $query)是把整个搜索短语作为一个完整的匹配条件,数据库里只有当书名完整出现“PHP BOOKS”这个短语时才会被命中,这显然和你期望的“任意关键词匹配”逻辑不符。

解决方案:拆分关键词,逐个添加OR匹配条件

我们需要把搜索字符串拆分成单个关键词,然后为每个关键词添加OR LIKE的查询条件,这样只要书名包含任意一个关键词就会被筛选出来。

修改你的模型代码如下:

public function search($query) {
    $this->db->order_by('id', 'DESC');
    $this->db->from('books');
    $this->db->where('status', 1);
    
    // 拆分搜索关键词:处理多个连续空格的情况,同时去掉首尾空格避免空元素
    $keywords = preg_split('/\s+/', trim($query));
    
    // 遍历关键词,添加OR LIKE匹配条件
    foreach ($keywords as $key => $keyword) {
        if ($key === 0) {
            // 第一个关键词用like初始化匹配条件
            $this->db->like('book_name', $keyword);
        } else {
            // 后续关键词用or_like,实现“任意关键词匹配”
            $this->db->or_like('book_name', $keyword);
        }
    }
    
    $q = $this->db->get();
    return $q->result();
}

代码说明

  1. 关键词拆分:使用preg_split('/\s+/', trim($query))可以把多个连续空格当成分隔符,同时去除字符串首尾的空格,避免生成空的关键词。
  2. 多条件组合:第一个关键词用like,后续关键词用or_like,最终生成的SQL语句会是WHERE status = 1 AND (book_name LIKE '%PHP%' OR book_name LIKE '%BOOKS%'),完美实现你想要的“匹配任意关键词”效果。

现在再测试“PHP BOOKS”,就能拿到所有书名含PHP或者含BOOKS的书籍啦~

内容的提问来源于stack exchange,提问作者Tahmid-ni7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:19:28