2013-04-14 51 views
2

我寫了一個模型代碼,我加入了兩張表,並返回了我的結果。無法統計確切的行數

從下面的表格結構中,我的模型代碼只顯示了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; 
    } 
} 
+0

@JoachimIsaksson是,Thankyou.Working罰款。我不知道。這個連接留下了什麼意思?發佈它作爲答案與litle解釋。所以我可以接受你的回答 –

+0

@BurlsWillis MySQL'LEFT JOIN',準備好[關於它的文檔](http://dev.mysql.com/doc/refman/5.5/en/left-join-optimization.html) 。 – Uby

+0

@BurlsWillis當然,增加了一個答案。 –

回答

0

你什麼需要的是LEFT JOIN,這基本上意味着如果首先提到的表中有一行存在,則不需要提到的第二個表中的對應行。在你的情況下,如果有問題,即使沒有匹配的答案,也會返回。

要在codeigniter中進行左連接,只需將'left'作爲第三個參數傳遞給join;

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

有關加入呼叫的更多信息,請撥打at the CodeIgniter docs

0

您應該使用LEFT JOIN

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