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

如何将原生SQL查询改写为CodeIgniter查询构造器调用格式

错误原因

  • 重复调用$this->db->select('*')、$this->db->from('airwaybill'),会让查询构造器把airwaybill也加入主查询的FROM子句,导致表名冲突报错
  • NOT EXISTS是子查询逻辑,需要完整写在WHERE条件中,不需要单独调用from指定表
  • 遗漏了原SQL的ORDER BY排序逻辑
  • 最后调用get()方法时重复传入表名rincian_permintaan,而你之前已经通过from()指定过主表,重复传入会导致主表被重复定义报错

正确改写代码

直接把NOT EXISTS子查询作为自定义WHERE条件传入,第三个参数设为FALSE关闭自动转义即可和原SQL逻辑完全一致:

$this->db->select('*');
$this->db->from('rincian_permintaan');
$this->db->join('permintaan', 'permintaan.id_permintaan = rincian_permintaan.id_permintaan');
$this->db->join('users', 'permintaan.id_peminta = users.user_id');
$this->db->join('cabang', 'cabang.id_cabang = users.id_cabang');
$this->db->join('barang', 'barang.id_barang = rincian_permintaan.id_barang');
$this->db->join('po', 'rincian_permintaan.id_po = po.id_po');
$this->db->where('po.id_cabang', '201');
$this->db->where('users.id_cabang !=', 201);
// 写入NOT EXISTS子查询,关闭自动转义
$this->db->where('NOT EXISTS (SELECT * FROM airwaybill WHERE airwaybill.id_rincian_permintaan = rincian_permintaan.id_rincian_permintaan)', NULL, FALSE);
// 补充排序逻辑
$this->db->order_by('rincian_permintaan.created_at', 'DESC');
// get方法无需再传表名
return $this->db->get()->result_array();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:36:03