MySql 查询在 PHPmyadmin 中工作,但在 codeigniter 中不工作

Posted

技术标签:

【中文标题】MySql 查询在 PHPmyadmin 中工作,但在 codeigniter 中不工作【英文标题】:MySql query working in PHPmyadmin, but not working in codeigniter 【发布时间】:2018-07-19 22:42:56 【问题描述】:

当我尝试在单个查询中使用 5 个表从数据库中获取数据时,我正在从事 codeigniter 项目。

phpmyadmin 中,sql 查询工作正常,但 codeigniter 查询不工作。

我的 Phpmyadmin 查询:

select sma_sales.date, sma_sales.reference_no, biller, sma_companies.name as DeliveryRep,customer,c.code, 
GROUP_CONCAT(CONCAT(sma_sale_items.product_name, ' (', sma_sale_items.quantity, ')') SEPARATOR '\n') as iname, 
grand_total, paid, sma_payments.amount as pyname, 
payment_status
from sma_sales
left outer join sma_sale_items on sma_sale_items.sale_id=sma_sales.id
left outer join sma_companies on sma_companies.id=sma_sales.delivered_id
left outer join sma_companies as c on c.id=sma_sales.customer_id
left outer join sma_warehouses on sma_warehouses.id=sma_sales.warehouse_id
left outer join sma_payments on sma_payments.sale_id=sma_sales.id
group by sma_sales.id

我的 Codeigniter 查询:

->select("date, reference_no, biller, companies.name as DeliveryRep,customer,c.code, "
                        . "GROUP_CONCAT(CONCAT(" . $this->db->dbprefix('sale_items') . ".product_name,"
                        . " ' (', " . $this->db->dbprefix('sale_items') . ".quantity, ')') SEPARATOR '\n') as iname,"
                        . " grand_total, paid,payments.amount as pyname, payment_status", FALSE)
                ->from('sales')
                ->join('sale_items', 'sale_items.sale_id=sales.id', 'left')
                ->join('companies', 'companies.id=sales.delivered_id', 'left')
                ->join('companies as c', 'c.id=sales.customer_id', 'left')
                ->join('warehouses', 'warehouses.id=sales.warehouse_id', 'left')
                ->join('payments', 'payments.sale_id=sales.id', 'left')
                ->group_by('sales.id')
$q = $this->db->get();

sma 只是数据库前缀

【问题讨论】:

【参考方案1】:

您需要在表名中添加sma,它是表名的一部分。

查询:

$this->db->select("date, reference_no, biller, sma_companies.name as DeliveryRep,customer,c.code, "
                            . "GROUP_CONCAT(CONCAT(" . $this->db->dbprefix('sale_items') . ".product_name,"
                            . " ' (', " . $this->db->dbprefix('sale_items') . ".quantity, ')') SEPARATOR '\n') as iname,"
                            . " grand_total, paid,sma_payments.amount as pyname, payment_status", FALSE)
                    ->from('sma_sales')
                    ->join('sma_sale_items', 'sma_sale_items.sale_id=sma_sales.id', 'left')
                    ->join('sma_companies', 'sma_companies.id=sma_sales.delivered_id', 'left')
                    ->join('sma_companies as c', 'c.id=sma_sales.customer_id', 'left')
                    ->join('sma_warehouses', 'sma_warehouses.id=sma_sales.warehouse_id', 'left')
                    ->join('sma_payments', 'sma_payments.sale_id=sales.id', 'left')
                    ->group_by('sales.id')
    $q = $this->db->get();

您可以通过搜索调试您的查询并将其设置为true,

$db['default']['db_debug'] = true;

在您的 config/database.php 中

结论:问题出在表名的别名中,修复别名后一切正常。

【讨论】:

我们不需要提到 sma 作为前缀。我的项目库函数自动将前缀映射到表名 看不到错误,因为此查询正在运行 pdf 下载。 点击下载页面显示满空 在 get() 和 echo $this->db->last_query() 之后退出或死亡; 搜索并将其设置为true,$db['default']['db_debug'] = true;在您的 config/database.php 中,然后检查您遇到的错误。【参考方案2】:

您正在使用 5 个表。可能相同的列名可以存在于多个表中。您可以为所有表使用别名并将查询更改为:

$this->db->select("s.date , s.reference_no, s.biller, companies.name as DeliveryRep,s.customer,c.code, "
                       . "GROUP_CONCAT(CONCAT(" . $this->db->dbprefix('sale_items') . ".product_name, "
                       . "' (', " . $this->db->dbprefix('sale_items') . ".quantity, ')') SEPARATOR '\n') as iname, "
                       . "s.grand_total, s.paid,pay.amount as pyname, s.payment_status", FALSE)
               ->from('sales as s')
               ->join('sale_items', 'sale_items.sale_id=s.id', 'left')
               ->join('companies', 'companies.id=s.delivered_id', 'left')
               ->join('companies as c', 'c.id=s.customer_id', 'left')
               ->join('warehouses', 'warehouses.id=s.warehouse_id', 'left')
               ->join('payments as pay', 'pay.sale_id=s.id', 'left')
               ->group_by('s.id')
               ->order_by('s.date desc');

【讨论】:

以上是关于MySql 查询在 PHPmyadmin 中工作,但在 codeigniter 中不工作的主要内容,如果未能解决你的问题,请参考以下文章

查询在 PHPMyAdmin 中工作但在 PHP 中不工作

Mysql 查询在 Codeigniter 中返回空结果,但在本机 PHP 中工作正常

MultyQuery 在 phpmyadmin 中工作,在 Mysqli 中不工作,在其他服务器上工作

没有让 SELECT COUNT 在 PHPMYADMIN 中工作 [关闭]

Phpmyadmin 停止在 ubuntu 中工作

更改权限后,Phpmyadmin 无法在 ubuntu xampp 中工作