我有这个SQL查询,在普通的sql语法
中是这样的SELECT *
FROM question
LEFT JOIN abcd_selection ON question.questionID = abcd_selection.questionID
WHERE question.SurveyID =21
这完全没问题,我得到了我想要的东西。但是,当我将其切换到CI时,它并不奇怪。对于与abcd_selection不匹配的行,questionID列会消失。
$this->db->select('*');
$this->db->from('question');
$this->db->join('abcd_selection','question.QuestionID = abcd_selection.QuestionID', 'left');
$this->db->where('question.SurveyID', $input_qid);
$query = $this->db->get();
任何人都可以解决这个问题吗?
答案 0 :(得分:0)
当连接2个具有相同列名的表时,如果第二个表中没有匹配的行,则会得到NULL
值。
question.SurveyID question.QuestionID abcd_selection.QuestionID
1 2 2 //matching row in abcd_selection
2 3 NULL //no matching row in abcd_selection
由于列名相同,php将选择QuestionID
的最后一个实例,当匹配的行不存在时,它将为NULL
。
解决此问题的一种方法是选择列作为别名
$this->db->select('*,question.QuestionID as QID');
现在即使$query['QID']
不存在,您也可以选择abcd_selection.QuestionID
。