codeigniter连接相同的表多个值

时间:2017-10-19 04:51:46

标签: php mysql codeigniter

我需要一些codeigniter 3帮助你的朋友。就像10年前我做了一些更复杂的查询而我的无聊的JOIN-trys只给了我几个小时的错误和问号。

假设我有一个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();
}

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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();

让我知道这是否有效

答案 2 :(得分:0)

由于我已经正确理解了您的问题,所以您想两次在colorsbgcolor_id的{​​{1}}表上加入,所以我在这里为您的问题提供解决方案,让我知道是否解决方案还是有问题的,谢谢。

color_id