web-dev-qa-db-ja.com

アクティブなレコードを持つCOUNT / GROUP BY?

次の情報を含むテーブルがあります。

id  |  user_id  |  points
--------------------------
1   |  12       |  48
2   |  15       |  36
3   |  18       |  22
4   |  12       |  28
5   |  15       |  59
6   |  12       |  31

etc.

私が欲しいのは、user_idごとにほとんどのエントリを持つ上位10(配列)です(上位から下位へ)。したがって、上の表を使用して、次の配列が必要です。

  • 12 => 3行
  • 15 => 2行
  • 18 => 1行
  • 等.

アクティブレコードクエリメソッドを使用してCodeIgniterでこれを行うにはどうすればよいですか?これは、COUNTおよびGROUP BY user_idで実行できますか?

24
24creative

次のようなものが必要になると思います。

 $this->db->select('user_id, COUNT(user_id) as total');
 $this->db->group_by('user_id'); 
 $this->db->order_by('total', 'desc'); 
 $this->db->get('tablename', 10);

これにより、次のような結果が生成されます

|  USER_ID |  TOTAL  |
|    12    |    3    |
|    15    |    2    |
|    18    |    1    |

PDATE:コメントで指摘されているように、元のクエリはuser_idをカウントするのではなく、合計していました。これを修正するためにアクティブレコードクエリを更新しました。

77
Brett DeWoody

それは遅い答えですが、私はこれがあなたを助けると言うでしょう...

$query = $this->db
              ->select('user_id, count(user_id) AS num_of_time')
              ->group_by('user_id')
              ->order_by('num_of_time', 'desc')
              ->get('tablename', 10);
print_r($query->result());
9
NULL

FOUND_ROWS()およびSQL_CALC_FOUND_ROWS で結果を数える必要があると思います。 select、_group_by_などの2つのクエリが必要です。プラス選択:_SQL_CALC_FOUND_ROWS user_id_を追加します。このクエリの後、クエリを実行します:SELECT FOUND_ROWS()。これにより、目的の番号が返されます。

2
uzsolt

このコードは、日付範囲のある行をカウントします。

コントローラ:

$this->load->model("YourModelName");
$data ['query'] = $this->YourModelName->get_report();

型:

  public function get_report()
     {   
       $query = $this->db->query("SELECT  *
FROM   reservation WHERE arvdate <= '2016-7-20' AND  dptrdate >= '2016-10-25' ");
       return $query;
     }

ここで、「arvdate」と「dptrdate」はデータベース上の2つの日付であり、「reservation」はテーブル名です。

見る:

<?php
 echo $query->num_rows();
?>

このコードは行数を返すことです。テーブルデータを返すには、次を使用します

$query->rows();
return $row->table_column_name;
1
Infolet.org
$this->db->select('overal_points');
$this->db->where('point_publish', 1);
$this->db->order_by('overal_points', 'desc'); 
$query = $this->db->get('company', 4)->result();
0
user3444748