2012-01-13 66 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