объединить запрос и group_by - PullRequest
0 голосов
/ 04 декабря 2011

у меня есть две таблицы 'город' и 'информация'.Город выглядит как

                  city_id    name
                   1         c1
                   2         c2

А информация выглядит как

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

В информационной таблице City_city_id и status_status_id указаны fks.Я хочу выполнить запрос, который бы подсчитывал количество городов с определенным статусом.Для этого я соединил две таблицы и для каждой строки таблицы 'city' я выполнил запрос, но все время получаю ответ 00. Это означает, что он всегда показывает, что число city равно нулю при определенном статусе.

Модель приведена ниже:

            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');


} 

Я думаю, что-то не так с моим join и group_by, но я не могу найти ошибку.Заранее спасибо.

1 Ответ

1 голос
/ 04 декабря 2011

Итак, вы хотите

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

даст результат:

status_status_id    num_cities
       1                2
       2                1

Затем вы можете использовать что-то вроде этого:

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";
    }
}
...