COUNT / GROUP BY 与活动记录?
Posted
技术标签:
【中文标题】COUNT / GROUP BY 与活动记录?【英文标题】:COUNT / GROUP BY with active record? 【发布时间】:2012-02-17 18:49:35 【问题描述】:我有一张包含以下信息的表格:
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 来完成吗?
【问题讨论】:
【参考方案1】:我相信你会想要这样的东西:
$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 |
更新:正如一些在 cmets 中指出的那样,原始查询是对 user_ids 求和而不是对它们进行计数。我已更新活动记录查询以更正此问题。
【讨论】:
您也可以使用$this->db->last_query()
函数查看User Guide: Query Helper Functions函数生成的活动记录
这也行得通,尽管您经常需要更改一堆 CI 设置,以便它在尝试运行无效查询时不会引发错误。
这个答案是对 user_ids 求和而不是对它们进行计数。
对键求和而不是计数。对于用户 id 12,这将输出:36 这当然是不受欢迎的!
我想指出的是,它计算的是 id 而不是行数。这就是为什么要投反对票。【参考方案2】:
虽然这是一个迟到的答案,但我想说这会对你有所帮助......
$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());
【讨论】:
【参考方案3】:我认为你应该用FOUND_ROWS() and SQL_CALC_FOUND_ROWS 来计算结果。您将需要两个查询:select
、group_by
等。您将添加一个加号选择:SQL_CALC_FOUND_ROWS user_id
。在此查询之后运行查询:SELECT FOUND_ROWS()
。这将返回所需的数字。
【讨论】:
【参考方案4】:此代码计算日期范围内的行数:
控制器:
$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;
【讨论】:
【参考方案5】:$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();
【讨论】:
以上是关于COUNT / GROUP BY 与活动记录?的主要内容,如果未能解决你的问题,请参考以下文章
如何连接具有不同 GROUP BY 级别的两个查询,使一些记录为空