繁体   English   中英

Codeigniter获取复杂查询的行数

[英]Codeigniter get number of rows of complex query

我有一个包含多个内部联接的复杂查询。 该查询是用纯SQL编写的。 我不想将其转换为Active Record。 对于分页,我需要知道查询将返回的总行数,但我不想执行它。 我试过了:

$this->db->count_all_results($query);

但它什么也没返回。 还有其他方法可以从用SQL编写的复杂查询中获取行数吗?

这是查询:

SELECT o.id, o.heading, o.description, p.product_name, s.company_name
            FROM ci_offer o 
            INNER JOIN ci_products p ON o.product_id = p.id
            INNER JOIN ci_suppliers s ON p.supplier_id = s.id
            ORDER BY o.modified DESC

如果要使用count_all_results,则需要使用ActiveRecord。

但是您也可以将SELECT子句中的列替换为

COUNT(1) AS total

count_all_results()允许您确定特定Active Record查询中的行数!

您将需要运行查询,并让mysql为您提供查询返回结果的记录数。 如果仅需要生成的行数,请尝试以下操作:

SELECT count(*)
FROM ci_offer o 
INNER JOIN ci_products p ON o.product_id = p.id
INNER JOIN ci_suppliers s ON p.supplier_id = s.id
ORDER BY o.modified DESC

有点奇怪的期望:)我认为即使MySQL也不执行它也无法预测特定查询的结果行数,更不用说PHP框架了。

您可以尝试使用SQL事务,然后回滚或使用EXPLAIN。

最好的祝福

尝试使用:

$count = $query->num_rows();

代替 :

$count = $this->db->count_all_results($query);

祝好运 !

我正在使用SQL_CALC_FOUND_ROWS来获取总数。

$this->db->select('SQL_CALC_FOUND_ROWS ci_offer.id', false);
$this->db->select('FOUND_ROWS() as total_rows', false);
$query = $this->db->get();
$total = $query->row_array();
$list_array['total'] = $total['total_rows'];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM