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
相关产品推荐
相关产品推荐

