2013-04-14 42 views
1

我已經寫了一個模型代碼,我加入兩個表並返回結果。Codeigniter只返回我的模型類中的一行

我在我的表中有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; 
    } 
} 

回答

2

你必須選擇一個COUNT() SQL聚集。由於您沒有任何GROUP BY,數據庫將使用整個結果集作爲一個隱式組,從而在計算完所有結果時將結果集減少到一行。這是SQL應該如何工作。

您可以在之後檢查生成的sql查詢,在$this->db->get();行之後,然後在sql控制檯中運行它以查看發生了什麼。

您可能想要添加$this->db->group_by('question.question_id');或類似的東西。

+0

我保留了你的group_by代碼,但它仍然返回一行。我的db-> last_query()返回這個sql'SELECT'question'。*,'userdetails'。*,COUNT(answer.answer_id)AS'Answers' FROM('question')JOIN'answer' ON'answer'。 'question_id' ='question'.'question_id' JOIN'userdetails' ON'userdetails'.'user_id' ='question'.'user_id' GROUP BY'answer'.''question_id' LIMIT 5' –

+0

看起來像你只有一個不同的答案表中的question_id比。如果沒有您的實際數據,我無法分辨。你可以嘗試用sql建立你的查詢,並在你想要的時候把它切斷成CI的方法調用。另外,請記住,使用group by -s選擇非聚合列可能是不可預測的,請參閱http://stackoverflow.com/a/1591976/1515540。 – complex857

+0

事實上,它不工作,現在我發現問題爲什麼它不顯示我的問題表的另一行。它只顯示了有答案的問題。那些沒有答案的問題不在計算。我如何修改我的上述代碼以滿足我的新要求? –