无法计算确切的行数

时间:2013-04-14 12:42:44

标签: php mysql codeigniter

我已经写了一个模型代码,我正在加入两个表,并返回我的结果。

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

我想,如果没有答案那么它应该显示特定问题的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;
    }
}

2 个答案:

答案 0 :(得分:0)

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

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

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

有关加入通话的更多信息,请at the CodeIgniter docs

答案 1 :(得分:0)

您应该使用LEFT join

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