Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php codeigniter将同一个表连接到多个值_Php_Mysql_Codeigniter - Fatal编程技术网

Php codeigniter将同一个表连接到多个值

Php codeigniter将同一个表连接到多个值,php,mysql,codeigniter,Php,Mysql,Codeigniter,我需要你们朋友的帮助。就像10年前,我做了一些更复杂的查询,我的noobish加入尝试只给了我几个小时的错误和问号 假设我有一个mysql桌面 id, text, bgcolor_id, color_id example : 1, "nice headline", 55, 88 cover.bgcolor_id -> color.value AS bgcolorvalue color.name AS bgcolorname cover.color_id -> color.val

我需要你们朋友的帮助。就像10年前,我做了一些更复杂的查询,我的noobish加入尝试只给了我几个小时的错误和问号

假设我有一个mysql桌面

id, text, bgcolor_id, color_id
example : 1, "nice headline", 55, 88
cover.bgcolor_id -> 
color.value AS bgcolorvalue
color.name AS bgcolorname

cover.color_id ->
color.value AS colorvalue
color.name AS colorname
和一张桌子的颜色

id, value, name
example : 55, #FF0000, "red"
example : 88, #000000, "black"
如何基于bgcolor\u id“链接”,表格封面中的color\u id

id, text, bgcolor_id, color_id
example : 1, "nice headline", 55, 88
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();
}

加入两次你的颜色表

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

加入两次颜色表

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

让我知道这是否有效

我强烈建议您使用查询生成器

你可以这样做

$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\u id
color\u id
color\u id
表格两次,所以我在这里为你的问题提供解决方案,让我知道它是否有效或解决方案有问题,谢谢

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

我已经理解了你的问题,那么你想加入
bgcolor\u id
color\u 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();
 }

哦,老兄。男人。我印象深刻-它的工作。我努力理解你的疑问,我的大脑已经冒烟了。现在我想,如果我尝试从codeigniter以“活动记录风格”重新创建它。。。希望我能在睡觉后得到它…@scco yup尝试一下active record如果您无法完成此任务,请告诉我我将添加active record版本alsohey m khalid junaid,您知道我如何改进您的sql解决方案吗:当有人删除颜色行而没有id时,完整的查询将不会出现或给出错误。那么,有没有一种方法可以在有颜色的情况下“可选”地加入颜色,否则就只有空字段?哦,老兄。男人。我印象深刻-它的工作。我努力理解你的疑问,我的大脑已经冒烟了。现在我想,如果我尝试从codeigniter以“活动记录风格”重新创建它。。。希望我能在睡觉后得到它…@scco yup尝试一下active record如果您无法完成此任务,请告诉我我将添加active record版本alsohey m khalid junaid,您知道我如何改进您的sql解决方案吗:当有人删除颜色行而没有id时,完整的查询将不会出现或给出错误。那么,有没有一种方法可以在有颜色时“可选”地加入颜色?否则只有空字段?嘿嘿exe-因为你知道它是否有效-它会产生:非唯一的表/别名:“颜色”选择
封面
id
封面
文本
封面
bgcolor\u id
包括
颜色id
颜色
bgcolorvalue
颜色
名称
bgcolorname
颜色
colorvalue
colors
name
作为
colorname
封面
加入
colors
封面
bgcolor\u id
id
加入
封面上的
色彩
色彩
id
其中
封面
id
=1hey-hey-exe-因为你想知道它是否有效-它产生:不是唯一的表/别名:'colors'选择
封面
id
封面
文本
封面
封面
颜色
颜色
作为
bgcolorvalue>,
colors
name
as
bgcolorname
colors
value
as
colorvalue
colors
name
作为
colorname
封面
加入
colors
封面
bgcolor\u id
id
加入
封面上的
色彩
色彩
id
其中
封面
id= 1