如何将 codeigniter 预格式化查询转换为原始 mysql 查询(例如 $this->db->select('table1.*,table2.*,table3.*'))



我有一个网站,它使用CodeIgniter框架,几乎在每个请求中使用CodeIgniter的预格式化查询类来处理我的前同事构建的数据库中的数据。

其中一个例子是这样的:

function tampilkan_data(){
$this->db->select('barang.*,barang_keluar.*,barang_masuk.*');
$this->db->from('barang');
$this->db->join('barang_keluar', 'barang.id_barang=barang_keluar.id_barang','left');
$this->db->join('barang_masuk', 'barang.id_barang=barang_masuk.id_barang','left');
$this->db->order_by('barang.id_barang','asc');
$this->db->order_by('barang.kode_barang','asc');
$this->db->where('barang.status','0');
return $query = $this->db->get()->result();
}

我想更改该查询的结果,但为了首先理解它,我必须将其转换为原始的 MySQL 查询。已尝试执行此操作:

SELECT `barang`.*, `barang_keluar`.*, `barang_masuk`.*
FROM `barang` AS A
LEFT JOIN `barang_keluar` AS B ON A.id_barang = B.id_barang
LEFT JOIN `barang_masuk` AS C ON A.id_barang = C.id_barang
ORDER BY A.id_barang ASC, A.kode_barang ASC
WHERE A.status = 0

但是我得到了这个错误

1064 - 您的 SQL 语法有误;请查看与您的 MySQL 服务器版本对应的手册,了解在第 6 行的"WHERE A.status = 0 LIMIT 0, 25"附近使用的正确语法

我试图删除WHERE A.status = 0以查看我的代码中哪个是错误的,我得到了这个错误

1051 - 未知表"barang">

我认为问题出在SELECT barang.*, barang_keluar.*, barang_masuk.*行,因为我真的不知道如何用MySQL原始格式编写它。

我已经搜索了这个主题,我什至尝试将查询直接写入搜索栏,但我没有根据我的情况找到正确的方法。 希望有人能帮忙

您可以简单地打印查询,然后您可以看到原始 sql 格式的查询。

function tampilkan_data(){
$this->db->select('barang.*,barang_keluar.*,barang_masuk.*');
$this->db->from('barang');
$this->db->join('barang_keluar', 'barang.id_barang=barang_keluar.id_barang','left');
$this->db->join('barang_masuk', 'barang.id_barang=barang_masuk.id_barang','left');
$this->db->order_by('barang.id_barang','asc');
$this->db->order_by('barang.kode_barang','asc');
$this->db->where('barang.status','0');
$query = $this->db->get()->result(); // notice that i have removed the return keyword
echo $this->db->last_query(); // This will print your query directly on the screen.
}

但是您得到的错误是 -> 您没有一个名为 barang 的表。 确保该表存在。

希望对...

如果您想查看 CI 查询生成器生成的查询字符串,则可以记录此方法$this->db->last_query()该方法,这将给出最后一个 SQL 查询作为它执行的字符串。

您的查询几乎没问题。但是您必须按顺序更改它。因为您已经多次使用asc,所以 mysql 也不支持这样做。您需要修改查询,如下所示

SELECT A.*, B.*, C.*
FROM barang AS A
LEFT JOIN barang_keluar AS B ON A.id_barang = B.id_barang
LEFT JOIN barang_masuk AS C ON A.id_barang = C.id_barang 
WHERE A.status = 0 ORDER BY A.id_barang, A.kode_barang ASC

现在确认您的数据库中有表barang,然后重试。如果您遇到另一个sql问题,请在此处回复代码片段的屏幕截图。

最新更新