2017-03-27 28 views
-1

我想在JOIN條件下使用CASE,但它不再工作。如何在Codeigniter中加入案例

$this->db->join('user_profile ON sender.user_id = CASE WHEN mailbox.sender_user_id = 1 
          THEN mailbox_recipient.recipient_user_id 
          ELSE mailbox.sender_user_id END'); 

這樣

JOIN `user_profile ON sender`.`user_id = CASE WHEN mailbox`.`sender_user_id = 1 THEN mailbox_recipient`.`recipient_user_id ELSE mailbox`.`sender_user_id` `END` 

一個單引號```雜亂無章

+1

加上'(''CASE'和'之前)'END' –

+0

你的語法後'是錯的。 $ this-> db-> join('comments','comments.id = blogs.id'); https://www.codeigniter.com/userguide3/database/query_builder.html – 438sunil

+0

@ 438sunil:是的,我的壞。但如果在Codeigniter查詢生成器中使用JOIN和CASE,它仍然不起作用。除了使用$ this-> db-> query(); –

回答

1

顯示錯誤增加到此之前加入聲明

$this->db->protect_idenifiers(FALSE); 

它會刪除bacticks。在查詢get()語句後,添加以下內容。

$this->db->protect_idenifiers(TRUE); 

避免安全問題。

0

我嘗試使用其他替代品,

$this->db->join('user_profile AS sender', 'sender.user_id = '.$this->table_name.'.sender_user_id'); 
$this->db->join('user_profile AS recipient', 'recipient.user_id = '.$this->table_name.'_recipient.recipient_user_id'); 

然後在我的選擇是這樣的:

$this->db->select(
     $this->table_name.'.*, 
     (CASE WHEN mailbox.sender_user_id = '.$this->user_id.' THEN recipient.fullname ELSE sender.fullname END) AS user_name');