2015-12-15 64 views
0

我有一个与codeigniter中的排序$_post数据ptoblem。Codeigniter排序数据

控制器:

public function filter(){ 
... 
    $this->model->method($this->request->post); 
... 
} 

型号: $keys = $_POST -data

public function($keys) { 
    $this->db->select('*'); 
    $this->db->from('table1 t1'); 
    $this->db->join('table2 t2', 't2.id = t1.id', 'left'); 

    if(!empty($keys['value1']){ 
    $this->db->where('t1.column', $keys['value1']); 
    } 
    if(!empty($keys['value2']){ 
    $this->db->where('t1.column', $keys['value2']); 
    } 

    if($keys['value3'] || $keys['value4'] || $keys['value5']){ 
     $array = array($keys['value3'], $keys['value4'], $keys['value5']); 
     $this->db->where_in('t2.column', $array); 
    } 

    $query = $this->db->get()->result(); 
    return $query; 
} 

table1的

id value1 valu2 
1 23  24 
2 12  15 

table2中

t1_id value (this contain value of value3, value4, value5) 
2  7 
2  19 
2  13 
2  3 
1  7 
1  13 
1  3 

它的工作原理,但如果设置了value3..value5,然后选择所有值,而不是优先table1值,我需要做的值1和数值2它一直是优先级之前value3..value5 Sry基因为我的英语不好,TNX!

例如: products_table

product_id value1 value2 
    1   13 9 
    2   13 9 
    3   14 10 

product_to_atributes

product_id atribute_id 
    1   2 
    1   3 
    1   4 
    2   3 
    2   4 

product_atributes

atribute_id atribute_name 
    2   atr_name 
    3   atr_name2 
    4   atr_name3 

我需要的产品的选择列表,其中value1 = '13'value2 = '9'and product_to_atributes.atribute_id IN(2,4)

回答

0

您可以使用此:

$this->db->or_where_in(); 

你的代码应该是:

if($keys['value3'] || $keys['value4'] || $keys['value5']){ 
     $array = array($keys['value3'], $keys['value4'], $keys['value5']); 
     $this->db->or_where_in('t2.column', $array); 
    } 
+0

不工作,'$这个 - > DB-> or_where_in()',我得到了所有的记录列表 –

+0

如果使用' - > where('t2.column',$ keys ['value3']);'和' - > where('t2.column',$ keys ['value4']],您可以决定使用or_where或者and_where –

+0

);'和' - >其中('t2.column',$ keys ['value5']);' 无效 - 结果为空 't2.column'它是表中的一个字段。 if value is one - working'$ keys ['value3']' if value is multi - not –