2014-09-23 89 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'];