2017-10-19 90 views
0

我需要一些codeigniter 3幫助來自你的朋友。就像10年前,當我做了一些更復雜的查詢時,我的不注意的JOIN-trys只給了我幾個小時的錯誤和問題標記。codeigniter加入同一個表的多個值

可以說,我有一個MySQL表涵蓋

id, text, bgcolor_id, color_id 
example : 1, "nice headline", 55, 88 

和一張桌子的顏色

id, value, name 
example : 55, #FF0000, "red" 
example : 88, #000000, "black" 

如何根據bgcolor_id 「鏈接」,COLOR_ID表涵蓋

cover.bgcolor_id -> 
color.value AS bgcolorvalue 
color.name AS bgcolorname 

cover.color_id -> 
color.value AS colorvalue 
color.name AS colorname 

我的codeigniter模型

public function list(){ 
$query = $this->db->query('SELECT * FROM covers ORDER BY id DESC'); 
return $query->result_array(); 
} 

public function get($id){ 
$query = $this->db->query('SELECT * FROM covers WHERE id = ' . $id); 
return $query->row(); 
} 

回答

2

兩次加入你的顏色表

select c.*,c1.name bgcolorname, 
c1.value bgcolorvalue, 
c2.name colorname, 
c2.value colorvalue 
from covers c 
join colors c1 on c.bgcolor_id = c1.id 
join colors c2 on c.color_id = c2.id 

DEMO

+0

哦花花公子。男子。我印象深刻 - 它的作品。我努力理解你的疑問,我的大腦已經在吸菸。現在我想如果我嘗試在codeigniter的「活動記錄樣式」中重新創建...希望我會在睡眠後得到它... – scco

+0

@scco yup如果您無法完成此操作,請嘗試使用活動記錄,然後讓它我知道我會添加活動記錄版本 –

+0

嘿米哈立德junaid,你知道我可以如何推進你的SQL解決方案:當有人刪除顏色行,所以沒有ID - 完整的查詢不會出現或給出錯誤。所以有沒有辦法只是「可選」加入顏色時,有顏色 - 否則只有空的領域? – scco

0

我強烈建議你使用查詢生成器Reference

你可能喜歡的東西。

$cv = 'covers'; 
     $cl1 = 'colors'; 
     $cl2 = 'colors'; 
     $get = array(
      $cv.'.id', 
      $cv.'.text', 
      $cv.'.bgcolor_id', 
      $cv.'.color_id', 
      $cl1.'.value as bgcolorvalue', 
      $cl1.'.name as bgcolorname', 
      $cl1.'.value as colorvalue', 
      $cl1.'.name as colorname' 
     ); 
     $this->db->select($get); 
     $this->db->from($cv); 
     $this->db->where($cv.'.id', 1); 
     $this->db->join($cl1, $cv.'.bgcolor_id = ' . $cl1.'.id'); 
     $this->db->join($cl2, $cv.'.color_id = ' . $cl2.'.id'); 
     $result = $this->db->get()->result(); 

讓我知道,如果這個工程

+0

嘿嘿EXE - 因爲你瓦納知道,如果它 - 它產生: 不是唯一的表/別名: '顏色' 選擇'covers'.'id','covers'.'text','covers'。 'bgcolor_id','covers'.'color_id''''''''''''值''bgcolorvalue'''''''''''''''''''''''顏色'''''''''''''顏色''顏色'','顏色''''''作爲'colorname'從'covers'加入'顏色'開'cover'.'bgcolor_id' ='colors'.'id'加入'colors'開'covers'.'color_id' ='colors'。 'id' where'covers'.'id' = 1 – scco