我有一张包含以下信息的表格:
id | user_id | points
--------------------------
1 | 12 | 48
2 | 15 | 36
3 | 18 | 22
4 | 12 | 28
5 | 15 | 59
6 | 12 | 31
etc.
我想要的是前10个(数组),每个user_id有大多数条目(从高到低的顺序)。 所以使用上面的表格我需要以下数组:
如何使用活动记录查询方法对CodeIgniter执行此操作?可以使用COUNT和GROUP BY user_id来完成吗?
答案 0 :(得分:9)
虽然这是一个迟到的答案,但我会说这会对你有帮助......
$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());
答案 1 :(得分:2)
我认为你应该用FOUND_ROWS() and SQL_CALC_FOUND_ROWS计算结果。您需要两个查询:select
,group_by
等。您将添加加号选择:SQL_CALC_FOUND_ROWS user_id
。在此查询之后运行查询:SELECT FOUND_ROWS()
。这将返回所需的数字。
答案 2 :(得分:1)
此代码对具有日期范围的行进行计数:
控制器:
$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'是数据库中的两个日期,'reservation'是表名。
查看:
<?php
echo $query->num_rows();
?>
此代码用于返回行数。 要返回表数据,请使用
$query->rows();
return $row->table_column_name;
答案 3 :(得分:0)
$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();