Codeigniter"其中"和" or_where"

时间:2014-10-29 12:19:31

标签: php mysql codeigniter

我尝试使用codeigniter的活动记录执行以下SQL查询:

SELECT * FROM USERS_OPTIONS WHERE user_id = 3 AND ( option_id = 2 OR option_id = 5 OR option_id = 108 OR .... )

为此,我在codeigniter中有这个代码,但是它没有工作:

$this -> db -> where("user_id", $user_id);

foreach( $options as $option ){
    $this -> db -> or_where("option_id" , $option["id"]  );
}

$ options是一个数组,我存储了我需要的所有options_id。

如果我分别尝试2个查询中的任何一个,它们都能正常工作。但是我无法混合这两个条件。

我怎么能得到这个?提前谢谢。

5 个答案:

答案 0 :(得分:3)

您可以使用$this->db->where_in()

  

生成WHERE字段IN('item','item')与AND连接的SQL查询   如果合适的话

$names = array('Frank', 'Todd', 'James');
$this->db->where_in('username', $names);
// Produces: AND username IN ('Frank', 'Todd', 'James')

在您的情况下,您将拥有:

$this->db->where_in('option_id', $options)
         ->get_where("your_table", array("user_id" => $user_id))->result();

Doc:https://ellislab.com/codeigniter/user-guide/database/active_record.html

答案 1 :(得分:1)

$this->db->select()->from('USERS_OPTIONS')->where("user_id $user_id AND (

// LOOP THROUGH PHP TO PRINT SOME THING LIKE or_where

));

答案 2 :(得分:0)

您应该尝试$this->db->where_in();。首先收集所有选项ID&然后像这样使用它:

  

生成WHERE字段IN(' item',' item')SQL查询与AND连接(如果适用)

$names = array('Frank', 'Todd', 'James');
$this->db->where_in('username', $names);
// Produces: AND username IN ('Frank', 'Todd', 'James')

答案 3 :(得分:0)

请检查以下代码,并且不能使用活动记录方法连接AND OR条件。

//Filtering by user
$where_condition = "(user_id = '".$user_id."')";

//Filtering by options
if(count($options)){

    $where_condition .= " AND (";

    foreach( $options as $option ){
        $where_condition .= "option_id = '".$option["id"]."' OR ";
    }

    $where_condition = substr($where_condition, 0, -3); //Remove last 3 characters OR with space

    $where_condition = $where_condition. ")";

}

//Select data                   
$this->db->select('*'); 
$this->db->from("TABLE_NAME");
$this->db->where($where_condition); 

答案 4 :(得分:0)

最后,这是我使用活动记录实现此目的的最佳方式:

使用如下数组:

$options = array ( option_id1 , option_id2, ... , option_idn );

$this -> db -> where("id_user", $id_user);
$this -> db -> where_in("id_option" , $options  );

这给了我我想要的东西,它非常清楚