簡體   English   中英

Codeigniter連接同一表的多個值

[英]codeigniter join same table multiple values

我需要您的朋友一些codeigniter 3幫助。 就像10年前,當我進行一些更復雜的查詢時,我的笨拙的JOIN嘗試只給了我幾個小時的錯誤和問號。

可以說我有一個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

我的代碼點火器模型

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();
}

加入您的顏色表兩次

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

演示

我強烈建議您使用查詢生成器參考

你可以這樣。

$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();

讓我知道這個是否奏效

由於我已經正確理解了您的問題,因此您想兩次針對bgcolor_idcolor_id加入colors表,因此在這里,我為您的問題提供了解決方案,請讓我知道它是否有效或解決方案出現問題,謝謝。

 public function list(){
     $query = $this->db->select("covers.*, bg.value AS bgcolorvalue bg.name AS 
                            bgcolorname, colors.value AS colorvalue
                            colors.name AS colorname")
                 ->join("colors", "colors.id = covers.color_id", "left")
                 ->join("colors as bg", "bg.id = covers.bgcolor_id", "left")
                 ->get("covers")->result(); 
     return $query->result_array();
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM