2015-06-09 119 views
0

我需要在Codeigniter中的join语句中使用if语句。 我尝试此查询...如何在codeigniter中使用if语句加入查询

$partners = $this->db->select("h.partner_id,hd.id as detail_id,v.*, hd.handshake_id ,sum(if(hd.result = '0',1, 0)) AS not_tested ,sum(if(hd.result = '1',1, 0)) AS positive,sum(if(hd.result = '2',1, 0)) AS negative", FALSE) 
         ->from("handshake h") 
         ->join("visitor v", 'IF(h.visitor_id = "'.$visitor_data['id'].'", h.partner_id = v.id , h.visitor_id = v.id) ', 'left',FALSE)       
         ->join("handshake_detail hd", ' hd.handshake_id = h.id AND hd.visitor_id <> "'.$visitor_data["id"].'"', 'left',FALSE)      
         ->where("h.visitor_id", $visitor_data['id']) 
         ->or_where("h.partner_id", $visitor_data['id']) 
         ->group_by("h.partner_id") 
         ->get()->result_array(); 

如果我们写在上面的MySQL查询的话,它的工作,但是当我尝试笨语法,所以产生这样的错误...

功能trustcrowd_1 .0.IF不存在。查看参考手册中的'函数名称 分析和解析'部分

所以请帮助找出正确的Codeigniter查询语法。

+0

'加入( “访客V”, 'IF(h.visitor_id =“' $。visitor_data [ '身份证'。'“,h.partner_id = v.id,h.visitor_id = v.id)','left',FALSE)'检查为什么在** ON **条件下使用** IF **?它是否正确? – KTAnj

+0

我也想看看你的MySql工作查询。 – jagad89

回答

0

我的工作查询...

$this->db->set_dbprefix(''); 

$partners = $this->db->select("hd.visitor_id partner, h.id handshake, h.utp intro_date, v.name, v.email, v.birth_date, v.location, v.gender, v.image, v.test_date, v.clinic_place, SUM(IF(hd.result = '0', 1, 0)) AS not_tested, SUM(IF(hd.result = '1', 1, 0)) AS positive, SUM(IF(hd.result = '2', 1, 0)) AS negative from tc_handshake h left join tc_visitor v on IF(h.visitor_id = '".$visitor_data['id']."', h.partner_id = v.id , h.visitor_id = v.id)", FALSE) 
      ->join("tc_handshake_detail hd", 'h.id=hd.handshake_id AND hd.visitor_id <> "'.$visitor_data["id"].'"', 'left',FALSE) 
      ->where("h.visitor_id", $visitor_data['id']) 
      ->or_where("h.partner_id", $visitor_data['id']) 
      ->group_by("h.partner_id,h.utp")     
      ->order_by("h.id", "desc") 
      ->limit($total_dis_record, $page) 
      ->get()->result_array(); 

$this->db->set_dbprefix('tc_');