2

我编写了一个模型代码,我将在其中加入两个表,并返回我的结果。

answer从下表结构中,我的模型代码仅显示 2 个问题计数,跳过最后一个问题,经过少量研究,我发现它不计算我的第三个问题的原因是因为它在我的表中没有任何答案。

我想,如果没有答案,那么它应该为特定问题显示 count=0,如何解决这个问题?

表结构

question
-----------
question_id PK Auto_Incr  
question    varchar... 
votes       int


answer
------------
answer_id    PK  Auto_icre
question_id  FK refrences question  
content      longtext

表数据结构数据:

 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;
    }
}
4

2 回答 2

0

您需要的是 a LEFT JOIN,这基本上意味着如果第一个提到的表中有一行存在,则不需要提到的第二个表中的相应行。在您的情况下,如果有问题,即使没有匹配的答案也会返回。

要在 codeigniter 中进行左连接,您只需将“左”作为第三个参数传递给您的调用join

$this->db->join('answer','answer.question_id = question.question_id', 'left');

CodeIgniter 文档中提供了有关加入呼叫的更多信息。

于 2013-04-14T12:54:40.507 回答
0

你应该使用左连接

$this->db->join('answer','answer.question_id = question.question_id','LEFT'); 
于 2013-04-14T12:54:41.873 回答