我已经写了一个模型代码,我正在加入两个表,并返回我的结果。
我的表中有26个结果,但我提到的代码只返回一行!可能是什么原因?为什么它只返回一行?
请帮我解决这个问题
更新
表格结构
question
-----------
question_id PK Auto_Incr
question varchar...
votes int
answer
------------
answer_id PK Auto_icre
question_id FK refrences question
content longtext
从下面的表结构我的模型代码只显示2个问题计数,跳过最后一个问题,经过一些研究我发现它没有计算我的第三个问题的原因,这是因为它没有我的任何答案answer
表。
我想,如果没有答案那么它应该显示特定问题的count = 0,如何解决这个问题?
表数据结构数据:
question
-----------
question_id question votes
1 what's name? 0
2 where you? 3
3 blah blah 9
answer
----------
answer_id question_id content
4 2 India
5 2 Nepal
6 2 Pakistan
7 1 Mr Osama Binladan
模型
public function fetch_allquestions($limit, $start)
{
$this->load->database();
$this->db->limit($limit, $start);
$this->db->from('question');
$select =array(
'question.*',
'userdetails.*',
'COUNT(answer.answer_id) AS `Answers`'
);
$this->db->select($select);
$this->db->join('answer','answer.question_id = question.question_id');
$this->db->join('userdetails','userdetails.user_id = question.user_id');
$query = $this->db->get();
print_r("Number of rows=".$query->num_rows());//showing only One, out of 26 rows
if ($query->num_rows() > 0)
{
foreach ($query->result() as $row)
{
$data[] = $row;
}
return $data;
}else{
return false;
}
}
答案 0 :(得分:2)
select中有COUNT()
sql聚合。由于您没有任何GROUP BY
,因此数据库将使用整个结果集作为一个隐式组,从而在计算全部时将结果集减少到一行。这是sql应该如何工作。
您可以在print $this->db->last_query()
行之后使用$this->db->get();
检出生成的sql查询,然后在sql控制台中运行它以查看发生了什么。
您可能想要添加$this->db->group_by('question.question_id');
或类似内容。