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

CodeIgniter3合并查询优化加载:分组排序展示数据库记录

可行!合并查询优化方案

完全可以将这4条查询合并为1条,减少数据库往返次数,大幅提升页面加载速度。以下是具体实现:

修改后的控制器代码

// 单条查询获取所有需要的菜单数据
$this->db->where('status', '1');
$this->db->where_in('type', ['starter', 'main_course', 'deserts', 'drinks']);
$this->db->order_by('type, id DESC'); // 先按类型分组排序,再按ID降序
$allMenus = $this->db->get('table_name')->result_array();

// 在PHP中按类型分组数据,保持原有视图变量结构
$data['all_starter_menu'] = [];
$data['all_maincourse_menu'] = [];
$data['all_deserts_menu'] = [];
$data['all_drinks_menu'] = [];

foreach ($allMenus as $menu) {
    switch ($menu['type']) {
        case 'starter':
            $data['all_starter_menu'][] = $menu;
            break;
        case 'main_course':
            $data['all_maincourse_menu'][] = $menu;
            break;
        case 'deserts':
            $data['all_deserts_menu'][] = $menu;
            break;
        case 'drinks':
            $data['all_drinks_menu'][] = $menu;
            break;
    }
}

视图代码无需修改

原有的视图循环代码可以完全保留,因为我们维持了$all_starter_menu、$all_maincourse_menu等变量的结构和命名,视图会正常渲染各类型菜单。

进一步优化建议

为了让合并后的查询执行更快,建议在数据库表上创建复合索引:

CREATE INDEX idx_status_type_id ON table_name (status, type, id DESC);

这个索引会直接匹配查询的过滤条件和排序规则,大幅减少数据库的查询时间。

内容的提问来源于stack exchange,提问作者Sajid Khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 17:09:32