2017-04-10 57 views
1

我的查询:笨 - 在查询条件

$CI->db->select('UserID, Email, Alias, Status, Age'); 
$CI->db->from('Users'); 
$CI->db->where('Status', 'Available'); 
$query = $CI->db->get(); 
$result = $query->result(); 
//next comes a function that sends $result to the client app 

现在,它的工作原理,但对于年龄记录< 18,我想获得的别名字段为空,所以认为这个值是不发送给用户。

如何通过MySQL查询来实现该目标?当然,这可以通过PHP foreach循环来完成,但我宁愿避免由于操作时间成本(MySQL查询可能会更快)导致的这种情况。

+0

$ CI-> DB->其中( '年龄', '<' '18'); –

+0

你可以使用多个像上面的例子 –

回答

0

您可以修复SQL中使用MySQL的条件这个问题:

查询会是这样的:

SELECT UserID, Email, IF(Age<18, Alias, "") as Alias, Status, Age FROM Users Where Status='Available'; 

可以在CI实现查询波纹管:

$CI->db->select('UserID, Email, IF(Age<18, Alias, "") as Alias, Status, Age'); 
$CI->db->from('Users'); 
$CI->db->where('Status', 'Available'); 
$query = $CI->db->get(); 
$result = $query->result(); 
+0

这是工作!非常感谢你! –

0

CI中是这样做......

$where=array('Age <'=>'18', 
       'Status'=>'Available'); 
$this->db->where($where); 
$this->db->from('Users'); 
$query = $this->db->get(); 
if($query->num_rows()>0) 
{ 
    return $query->result_array(); 
} 
else 
return FALSE; 
+0

是的,但是这将使得选择年龄在18岁以上的所有记录。并且我需要不同的东西:年龄低于18岁的记录也应该被选择,但是没有别名字段。别名字段应该从它们中删除。 –

+0

你是说你需要上面和下面的数据和18 .. ??: -/ – Vimal

0
$CI->db->select('UserID, Email, if(Age < 18) as Alias, Status, Age'); 
    $CI->db->from('Users'); 
    $CI->db->where('Status', 'Available'); 
    $query = $CI->db->get(); 
    $result = $query->result(); 

,或者你也可以写这样的查询:

$query=$this->db->query("select UserID, Email,if(Age < 18) as Alias, Status, Age from users where status='Available'"); 
+0

我只需要从Age <18的记录中去掉别名字段,上面的代码做了一些不同的事情,它只选择年龄<18的记录。 –

+0

我开始考虑运行两个单独的查询,然后将它们组合在一起。 –