我有两个表,表示Table1和Table2,我在表2中使用Table1.PrimaryKey = Table2.ForeignKey连接表1。它确实从两个表返回所有行但在某些行中,由于Table2中没有连接条件的记录,因此Table1缺少PrimaryKey字段值。这是我的代码
$this->db->select('*');
$this->db->from('CI_Articles_Tbl');
$this->db->join('CI_Article_Images_Tbl',
'CI_Articles_Tbl.roflArticle_ID=CI_Article_Images_Tbl.roflArticle_ID','left');
$this->db->group_by('CI_Articles_Tbl.roflArticle_ID');
$query = $this->db->get();
return $query->result_array();
我的查询有什么问题,可能的解决方案是什么。 任何帮助将受到高度赞赏。
答案 0 :(得分:1)
您已选择table.*
试试这段代码。
$this->db->select('CI_Articles_Tbl.*');
答案 1 :(得分:1)
我对自己的问题的回答是这个,但让我首先感谢“打火机”!他的代码帮助我纠正了我的疑问,
假设您有两个表Table1和Table2,并且您希望在表2上或在其他意义上LEFT JOIN Table1,您希望两个表中的所有行在表1和表2中是否匹配引用匹配或不匹配。例如,你想要这样
Table1.P1 = Table2.P1
我正在做的事情我继续选择Table1中的所有字段然后直接在Table2上给出了连接条件,这是错误的,因为有时Table1.P1将没有匹配Table2.P1,在这种情况下,行将来,但值Table1.P1将丢失。
您需要做的是具体显示您想要从哪些表中选择哪些字段除了您在连接条件中使用的Table2字段。像这样 表格1。* 表2. *除了Table2.P1(注意:非常重要)
我的代码出于任何参考目的
$this->db->select('CI_Articles_Tbl.*,CI_Article_Images_Tbl.roflArticleImage_ID,CI_Article_Images_Tbl.roflArticleImage_Ext,CI_Users_Tbl.*');
$this->db->from('CI_Articles_Tbl','CI_Article_Images_Tbl','CI_Users_Tbl');
$this->db->join('CI_Article_Images_Tbl','CI_Articles_Tbl.roflArticle_ID=CI_Article_Images_Tbl.roflArticle_ID','left outer');
$this->db->join('CI_Users_Tbl','CI_Articles_Tbl.roflUser_ID=CI_Users_Tbl.roflUser_ID');
$this->db->group_by('CI_Articles_Tbl.roflArticle_ID');
$query = $this->db->get();
return $query->result_array();