次の情報を含むテーブルがあります。
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(配列)です(上位から下位へ)。したがって、上の表を使用して、次の配列が必要です。
アクティブレコードクエリメソッドを使用してCodeIgniterでこれを行うにはどうすればよいですか?これは、COUNTおよびGROUP BY user_idで実行できますか?
次のようなものが必要になると思います。
$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をカウントするのではなく、合計していました。これを修正するためにアクティブレコードクエリを更新しました。
それは遅い答えですが、私はこれがあなたを助けると言うでしょう...
$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());
FOUND_ROWS()およびSQL_CALC_FOUND_ROWS で結果を数える必要があると思います。 select
、_group_by
_などの2つのクエリが必要です。プラス選択:_SQL_CALC_FOUND_ROWS user_id
_を追加します。このクエリの後、クエリを実行します:SELECT FOUND_ROWS()
。これにより、目的の番号が返されます。
このコードは、日付範囲のある行をカウントします。
コントローラ:
$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;
$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();