2016-11-12 58 views
1

我有一個複雜的SELECT與幾個耗時的計算字段。我只想要前100行,但是,我還需要找到總行數。這意味着執行查詢一次LIMIT和一次沒有。如何使用CodeIgniter QueryBuilder一次構建多個查詢?

我希望能夠與CodeIgniter的QueryBuilder同時構建兩個SELECT,並消除第二個查詢中耗時的計算字段。

我想知道是否有一個很好的方式與QB做到這一點,或者我應該建立沒有QB的SELECT

更新:顯然我困惑的人。我需要做這樣的事情:

爲了讓記錄顯示:

SELECT id, [ several really time intensive calculated fields ] 
FROM table 
WHERE [some complicated criteria] 
LIMIT 100; 

得到總的記錄,我想重新使用內置查詢或同時,但沒有建立一個第二一個限制並且僅帶有ID字段:

SELECT id 
FROM table 
WHERE [some complicated criteria]; 

另一種選擇是:我已經瞭解到,如果我將時間密集的計算字段放在子SELECT中,Postgres將不會執行它,直到實際檢索到該行。

現在我手動建立兩個查詢,但我想要正確的QueryBuilder方式。

回答

0

無法在codeigniter中的一條語句中運行多個查詢。但是,你可能會做如下

$query1 = $this->db->query('SELECT * FROM table_name LIMIT 10'); 
$query2 = $this->db->query('SELECT * FROM table_name'); 

但我做的是使一個方法,並調用基於參數一樣

public function get_rows($table, $num_rows = FALSE){ 
    $this->db->select('*'); 
    $this->db->from($table); 
    if($num_rows === FALSE){ 
    $this->db->limit(10); 
    } 

    $query = $this->db->get(); 
    if($num_rows){ 
    return $query->num_rows(); 
    } 
    return $query->result_array(); 
} 

現在,你可以把它作爲您的要求

//call for only count rows (without limit) 
$this->model_name->get_rows('table_name', TRUE); 

//call with limit for result rows 
$this->model_name->get_rows('table_name'); 
+0

這與問題相去甚遠,但我確實喜歡你的get_rows函數。目標是要麼同時建立兩個不同的查詢,要麼執行一個,然後改變它的SELECT部分​​並再次運行而沒有限制。 –

0

與你可以用查詢生成器做到這一點我認爲 看看這個代碼,你可能想要類似的東西

if($limit != null){ 
     $this->db->limit($limit, $offset); 
    } 
    if($order_by != null){ 
     $this->db->order_by($order_by, $sort); 
    } 

    $query = $this->db->get('courses'); 

    $courses['rows'] = $query->result(); 

    $courses['num_rows'] = $this->db->count_all('courses'); 

    return $courses; 
+0

我不確定這一點,但我想CI只是重新運行相同的查詢,但沒有限制。這意味着PSQL會爲每個字段進行計算。 –