2014-09-23 90 views
0

我有一个复杂的查询,其中有多个内部联接。查询是用纯SQL编写的。我不想将它转换为活动记录。对于分页,我需要知道查询将返回的总行数,但我不想执行它。我试过了:Codeigniter获取复杂查询的行数

$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 
+0

您的查询是否有'group by'子句? – FuzzyTree 2014-09-23 19:05:10

+0

不,它不。它具有ORDER BY子句。 – 2014-09-23 19:05:51

+1

你能向我们提供你的查询吗? – 2014-09-23 19:06:37

回答

2

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

但你也可以用

COUNT(1) AS total 
+0

这看起来像一个可行的解决方案。我一定会尝试。 – 2014-09-24 07:59:10

0

有点儿奇怪的期待:)我不认为即使MySQL能够预测特定查询的结果行数不执行它,更别提PHP框架。

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

问候

0

尝试更换SELECT子句中的列使用:

$count = $query->num_rows(); 

相反的:

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

祝你好运!

1

count_all_results()允许您确定特定活动记录查询中的行数

您将需要运行查询并让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

是的,这就是接受的答案也是如此。我会试试这个。 – 2014-09-25 15:51:27

0

Im使用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'];