2011-12-04 15 views
0

私は2つのテーブル 'city'と 'info'を持っています。市はjoin query and group_by

    city_id name 
        1   c1 
        2   c2 

のように見え、情報は情報テーブルCity_city_idとstatus_status_idで

    id city_city_id status_status_id 
        1  1    1 
        2  2    1 
        3  1    2 

のように見えますFKSです。特定のステータスにある都市の数を数えるクエリを実行したいと思います。私は2つのテーブルに参加していて、 'city'テーブルの各行に対してクエリを実行しましたが、常に答えは00です。つまり、特定のステータスの下で都市の数がゼロであることを示しています。

モデルは以下与えるです:

  function count(){ 
      $this->db->select('*'); 
      $this->db->from('city'); 
      $this->db->join('info','info.city_city_id= city.city_id'); 
      $this->db->group_by('city_city_id'); 
      $sql=$this->db->get(); 
      if ($sql->num_rows()>0){ 

      foreach ($sql->result() as $row){ //loops through all the cities in city table 
      $r=1; 

     $this->db->where('city_city_id','city.city_id'); 

     $this->db->where('status_status_id', $r); 
     echo $this->db->count_all_results('info'); 


} 

を私は私の参加しGROUP_BYに何か問題があると思いますが、私は、障害を見つけることができません。 ありがとうございます。

答えて

1

だから、

I want to run a query that would count the number of cities 
under a particular status. 

すなわちしたい。あなたは、ステータス、およびそのステータスに属する都市の数を必要とします。右?その後、次のSQLクエリでは、あなたのために動作します:

SELECT status_status_id, count(*) AS num_cities 
FROM info 
GROUP BY status_status_id 

結果得られます:あなたはどの場所を明記してくださいすることができ

function count() { 
    $this->db->select('status_status_id, count(*) AS num_cities', FALSE); 
    $this->db->from('info'); 
    $this->db->group_by('status_status_id'); 

    $query = $this->db->get('mytable'); 
    foreach ($query->result() as $row) 
    { 
     echo 'STATUS_ID : ' . $row->status_status_id . "\n"; 
     echo 'NUM_CITIES: ' . $row->num_cities . "\n"; 
    } 
} 
+0

:次に

status_status_id num_cities 1 2 2 1 

を、あなたはこのようなものを使用することができます私のコードの私はこれを置き換える必要があります..ありがとう – user1052462

+0

@ user1052462私は 'count()'関数のコードで私の答えを編集しました。私はcodeigniterを知らないし、私がここで提供したのはドキュメンテーションを参照することである。だから、いくつかの構文エラーがあるかもしれませんが、それはとにかく私のロジックを示しています。 – Jomoos