2016-11-17 138 views
0

我在將代碼轉換爲codeigniter框架模型中的代碼時出現問題。帶有連接語句的Codeigniter連接語句

SELECT mt_prs_groups.groupId, mt_prs_groups.groupName, mt_prs_administrators.administratorId 
FROM mt_prs_status INNER JOIN (mt_prs_administrators INNER JOIN mt_prs_groups ON mt_prs_administrators.administratorId = mt_prs_groups.administratorId) ON (mt_prs_status.statusId = mt_prs_groups.statusId) AND (mt_prs_status.statusId = mt_prs_administrators.statusId) 
WHERE (((mt_prs_status.status)="Active") AND ((mt_prs_administrators.administratorId)=3)) OR (((mt_prs_administrators.administratorId)=4)); 

在模型我有翻譯這

$this->db->select('mt_prs_groups.groupId, mt_prs_groups.groupName'); 
$this->db->from('mt_prs_status'); 
$this->db->join('mt_prs_administrators', 'inner'); 
$this->db->join('mt_prs_groups', 'mt_prs_administrators.administratorId = mt_prs_groups.administratorId AND mt_prs_status.statusId = mt_prs_administrators.statusId', 'inner'); 
$this->db->where('mt_prs_status.status="Active"'); 
$this->db->where('mt_prs_administrators.administratorId=3'); 
$this->db->or_where('mt_prs_administrators.administratorId=4'); 

這是給我下面的錯誤

錯誤編號:1054

未知列 '內'' from子句'

SELECT mt_prs_groupsgroupIdmt_prs_groupsgroupName FROM mt_prs_status JOIN mt_prs_administrators USING(inner)INNER JOIN mt_prs_groups ON mt_prs_administratorsadministratorId = mt_prs_groupsadministratorId AND mt_prs_statusstatusId = mt_prs_administratorsstatusId其中mt_prs_statusstatus = 「有效」AND mt_prs_administratorsadministratorId = 3或 mt_prs_administratorsadministratorId = 4

查詢運行良好,當我把它直接放在mysql上,但在codeigniter失敗。問題是內部聯接依賴於其他內連接

回答

1

請試試這個。我想這到笨

$this->db->select('mt_prs_groups.groupId, mt_prs_groups.groupName'); 
$this->db->from('mt_prs_status'); 
$this->db->join('mt_prs_administrators', 'mt_prs_status.statusId = mt_prs_administrators.statusId','inner'); 
$this->db->join('mt_prs_groups', 'mt_prs_administrators.administratorId = mt_prs_groups.administratorId', 'inner'); 
$this->db->where('mt_prs_status.status="Active"'); 
$this->db->where('mt_prs_administrators.administratorId=3'); 
$this->db->or_where('mt_prs_administrators.administratorId=4'); 
+0

這對我來說...非常感謝你。我看到我的錯誤在哪裏我的查詢 –

+0

快樂是我的:) –

0

請嘗試這種格式

$this->db->select('tbl_tasks.task_id,tbl_tasks.task, tbl_assign_task.user_id'); 
     $this->db->from(TBL_TASKS); 
     $this->db->join(TBL_ASSIGN_TASK, 'tbl_tasks.task_id = tbl_assign_task.task_id'); 
     $this->db->where('tbl_assign_task.is_deleted', 0); 
     $this->db->where('tbl_assign_task.user_id', $userId); 
     $query = $this->db->get(); 
+0

的是它的一個內加入加盟。 'mt_prs_status'正在加入另一個連接語句 –

0

在這一行 - 「這 - $> DB->加入(‘mt_prs_administrators’,‘內部’); 「你沒有定義連接條件,這就是爲什麼你會收到一個錯誤,因爲CI連接的格式是 - $ this-> db-> join('table_name','我們應用連接的列名','連接類型');

+0

問題是如何將該查詢寫入codeigniter。該'mt_prs_status'加入另一個連接語句這個'(mt_prs_administrators INNER JOIN mt_prs_groups ON mt_prs_administrators.administratorId = mt_prs_groups.administratorId)ON(mt_prs_status.statusId = mt_prs_groups.statusId)AND(mt_prs_status.statusId = mt_prs_administrators.statusId)'在這第二聲明是一個連接。所以問題不是錯誤perse,而是我怎麼正確的聲明 –

+0

請看看聲明,並嘗試寫入codeigniter –