Codeigniter 获取复杂查询的行数

问题描述 投票:0回答:5

我有一个复杂的查询,其中包含多个内部联接。该查询是用纯 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
php sql mysql codeigniter pagination
5个回答
2
投票

如果您想使用 count_all_results,您需要使用 ActiveRecord。

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

COUNT(1) AS total

1
投票

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

0
投票

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

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

致以诚挚的问候


0
投票

尝试使用:

$count = $query->num_rows();

而不是:

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

祝你好运!


0
投票

我使用 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'];
© www.soinside.com 2019 - 2024. All rights reserved.