2012-01-13 91 views
1

嗨Codeigniter Experts。Codeigniter編譯查詢

我通過多次調用函數來編譯QUERY。

完成後,我將使用QUERY檢索某些數據。

每次調用,調用另一個函數獲取並返回一些翻譯這是應該在QUERY

被使用,但它似乎像在翻譯功能可按WHERE條件得到由WHERE條件我敢串連編譯主查詢

private function add_to_asq($field_name, $values) 
{ 
. 
. 
. 
. 
    $result = array(); 
    foreach($values[$last_level] as $val) 
    { 
      foreach($val as $v ) 
      { 
      $result[] = $this->db->escape($this->asq_value_translate($last_level, $v, $field_name)); 
     } 
    } 

    $this->db->where_in(sprintf('%1$s' , $field_name ) , implode(',' , $result)); 

} 


    private function asq_value_translate($level, $value_md5 , $field_name) 
    { 
     $this->db->select(sprintf('level_%1$d, level_%1$d_value' , $level)) 
     ->distinct() 
     ->from('search_options_tree_view') 
     ->where(sprintf('md5(level_%1$d_value) = ' , $level), $value_md5) 
     ->where('field_name' , $field_name); 
     $q = $this->db->get(); 
     $value_name = sprintf('level_%1$d' , $level); 
     $row = $q->row(0); 
     $q->free_result(); 
     return $row->$value_name;  
    } 

和DB抱怨它

錯誤編號:1054

未知列 '類型' 在 'where子句'

SELECT DISTINCT `level_1`, `level_1_value` FROM (`search_options_tree_view`) WHERE 

`type` IN ('\'Forhandler\'') 

AND md5(level_1_value) = '138be735c55896dbdbea9b6c5d503b6f' AND `field_name` = 'fuel' 

文件名:C:\ WAMP \ WWW \ SYSTEM \數據庫\ DB_driver.php

行號:330

正如你所看到的IN('\'Forhandler \'')與asq_value_translation沒有任何關係。

你有什麼建議嗎?

我想過克隆數據庫對象,但後來我認爲我先詢問後再拍。

非常感謝,有一個美好的時光。

回答

0

您應該使用$this->db->last_query()來查看您的查詢的輸出實際上是什麼。然後採取該查詢並在您的數據庫客戶端運行它,以確保問題不在codeigniter,而是在您的查詢。

+0

我希望使用框架來聲明查詢。但是,看起來WHERE是一種全球性的可以這麼說。在任何功能被執行之前,哪裏都可以被操縱。 – 2012-01-14 12:35:24

+1

是的,但如果您使用last_query函數,您可以看到爲where子句生成了什麼,然後根據需要進行修改。 – Catfish 2012-01-16 14:23:48

+0

謝謝,我會試試看。乾杯 – 2012-01-17 09:29:37