Codeigniter获取复杂查询的行数

时间:2014-09-23 19:02:12

标签: php mysql sql codeigniter paging

我有一个包含多个内部联接的复杂查询。该查询是用纯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

5 个答案:

答案 0 :(得分:2)

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

但您也可以用

替换SELECT子句中的列
COUNT(1) AS total

答案 1 :(得分: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

答案 2 :(得分:0)

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

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

祝你好运

答案 3 :(得分:0)

尝试使用:

$count = $query->num_rows();

而不是:

$count = $this->db->count_all_results($query);
祝你好运!

答案 4 :(得分: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'];