在条件不符合条件的情况下

时间:2016-02-24 09:43:54

标签: php codeigniter

这是我编写选择查询的函数

function userList($name,$logged_id,$friendlist)
{

    $this->db->select("concat((mu.first_name),(' '),(mu.last_name)) AS full_name,mu.user_id,user_type",FALSE);
    $this->db->from("mst_users as mu");        
    $this->db->where("user_status", "1");
    $this->db->where_in("user_id",$friendlist);
    $this->db->where('user_id !=', $logged_id,false);

    $this->db->where("email_verified", "1");        
    $this->db->where("mu.first_name LIKE '%$name%'");        
    $this->db->or_where("mu.last_name LIKE '%$name%'");            
    //$this->db->limit("3");
    $query = $this->db->get();
    return $query->result_array();  
}

这是我来自控制器的函数调用

function userList(){
    $arr_friend=array(127, 139, 138);
    $user_list = $this->search_model->userList(a,137,$arr_friend);   
}

这是查询的输出。这是错误的。

full_name   user_id     user_type   
Grace          1          2
admina         126        3
hancy          127        1
vaibhavaaa     132        1
arjun          137        1
ashish         138        3
sofia          139        1
emma           140        3
vaibhav        147        3
ashish         148        1

我只希望记录127,139,138这些Id

full_name   user_id     user_type   

hancy          127        1 
ashish         138        3
sofia          139        1

out put应该是这样的

3 个答案:

答案 0 :(得分:1)

这是因为您以错误的方式使用where_or,请将其替换为:

$this->db->where("mu.first_name LIKE '%$name%'");        
$this->db->or_where("mu.last_name LIKE '%$name%'");

使用:

$this->db->where("(mu.first_name LIKE '%$name%'", FALSE);        
$this->db->or_where("mu.last_name LIKE '%$name%')", NULL, FALSE);

答案 1 :(得分:0)

为避免出现问题,您应该使用:

$this->db->like('mu.first_name', $name);
$this->db->or_like('mu.last_name', $name);

您还可以控制通配符(%)的放置位置

$this->db->like('mu.first_name', $name, 'before');    
// Produces: WHERE `mu.first_name` LIKE '%value' ESCAPE '!'

$this->db->like('mu.first_name', $name, 'after');     
// Produces: WHERE `mu.first_name` LIKE 'value%' ESCAPE '!'

 $this->db->like('mu.first_name', $name, 'both');     
 // Produces: WHERE `mu.first_name` LIKE '%value%' ESCAPE '!'

查看文档here

答案 2 :(得分:0)

我改变了这一行

 $this->db->where("mu.first_name LIKE '%$name%'");        
 $this->db->or_where("mu.last_name LIKE '%$name%'");

到这个

$this->db->where("(mu.first_name LIKE '%$name%'");        
$this->db->or_where("mu.last_name LIKE '%$name%')");