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

Codeigniter实现名称排序数据库遇问题,请求技术协助

Codeigniter 名称排序功能修复方案

问题背景

原始数据:

  • Doe Blablabla
  • blablalba doe blablabla
  • blablabla doe
  • doe

期望排序结果(支持条数限制):

  • doe
  • Doe Blablabla
  • blablalba doe blablabla
  • blablabla doe

原代码问题分析

  1. 变量错误:函数参数为$name,但模糊匹配时误用了未定义的$id,导致筛选逻辑失效
  2. 排序逻辑不完整:原CASE语句仅区分完全匹配、开头匹配和其他情况,未细分$name在字符串中间、末尾的场景,无法实现期望的排序顺序
  3. 大小写未兼容:未处理大小写差异,导致Doe和doe的匹配优先级不一致

修正后的代码

public function getFilter($name)
{
    $lowerName = strtolower($name);
    $this->db->select("*, 
        (CASE 
            WHEN LOWER(people) = '$lowerName' THEN 1
            WHEN LOWER(people) LIKE '$lowerName%' THEN 2
            WHEN LOWER(people) LIKE '% $lowerName %' THEN 3
            WHEN LOWER(people) LIKE '%$lowerName' THEN 4
            ELSE 5
        END) as people_name");
    $this->db->from('citizen');
    // 不区分大小写的模糊匹配,确保所有包含目标名称的记录被筛选
    $this->db->where("LOWER(people) LIKE '%{$lowerName}%'");
    $this->db->order_by("people_name asc");
    $this->db->limit(2);  
    return $this->db->get()->result();
}

修正说明

  • 替换$id为$name,修正变量引用错误
  • 使用LOWER()函数统一字符串大小写,实现不区分大小写的匹配与排序
  • 细化CASE优先级:完全匹配→开头匹配→中间匹配→末尾匹配,对应权重1-4,确保排序结果符合预期
  • 调整筛选条件为不区分大小写的模糊匹配,避免遗漏符合条件的记录

内容的提问来源于stack exchange,提问作者enforeach zero

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 21:10:38