0

私は次の表を持っています

|id|city|job|
|12|New York|Truck driver|
|13|Chicago|Postman|
|14|New York|Postman|
|15|Las Vegas|Dealer|
|16|Las Vegas|Dealer|
|17|New York|Post Office|

各都市にいくつの仕事があるかを数えて、最も多くの仕事がある 10 の都市を DESC 順に返すことができるようにしたいと考えています。以下のように

  • ニューヨーク (3)
  • ラスベガス (2)
  • シカゴ (1)

どうすればこれを達成できますか?

私のコードは次のようになります

 $this->db->select('city');
 $this->db->select_sum('city', 'total');
 $this->db->group_by('city'); 
 $this->db->order_by('total', 'desc'); 
 $query = $this->db->get('job', 10);

foreach ($query->result() as $row) {
    $data[] = array(
        'total' => $row->total,
        'city' => $row->city
    );
}

return $data;

このスレッドからインスピレーションを得ました: COUNT / GROUP BY with active record?

しかし、それを正しく理解していないようです。

4

2 に答える 2

0

どうぞ:-

$query = $this->db->query('SELECT city, COUNT(city) AS jobcount FROM `jobs` GROUP BY city ORDER BY jobcount DESC');

if ($query->num_rows() > 0)
    foreach ($query->result() as $row) 
        $data[] = array(
            'total' => $row->jobcount,
            'city'  => $row->city
        );

return $data;

'jobs'テーブル名と交換することを忘れないでください

于 2013-08-17T16:08:16.097 に答える
0

使わない理由$this->db->query();?

$this->db->query('SELECT CITY, COUNT(CITY) AS TOTAL FROM JOB GROUP BY CITY ORDER BY TOTAL DESC LIMIT 10');
于 2013-08-17T15:59:14.127 に答える