javascript - 数据库查询结果上的 group_by 不起作用
问题描述
所以我有以下简单的数据库表以使事情变得更简单
Client_id | Client_name | Client_state
1 | John | New York
2 | Nick | New York
3 | Marc | California
4 | Jason | California
5 | Gabriel | Seattle
6 | Alex | Seattle
所以每当我点击下面的按钮
<button type="button" class="btn results btn-primary">results</button>
我有一个 Javascript 函数,可以调用 ajax 来获取结果。这是我的功能
$('.results').on('click',function(){
$.ajax({
type: 'ajax',
method: 'get',
async: false,
url: '<?php echo base_url() ?>client_results',
dataType: 'json',
success: function(response){
console.log(response)
}, //end success function
error: function(){
alert('Error');
}
});//end ajax call
这是我的模态函数
public function client_results(){
$this->db->select('*');
$this->db->group_by("Client_state"); // whenever i remove this i get all the rows without a problem
$query = $this->db->get('Clients');
return $query->result_array();
}
所以问题是每当我尝试按状态对行进行分组时,我都会收到以下错误!但是,一旦我通过一行代码删除了 groupe,一切都会正常运行,并且我可以毫无问题地在控制台中记录所有行!问题是我希望它们按状态分组!
请帮帮我!
解决方案
做 a 时Agroup by
没有多大意义select *
。不在 Codeigniter 的查询生成器上,不在 SQL 上
原因是分组旨在生成所有数据的分组摘要(行合并),但您并没有具体说明要对分组行做什么。
例如,获取您的样本数据。如果按州分组,client_id
和client_name
列会发生什么?SQL 并不真正知道如何处理它们,因为您的查询不明确。
您想在每个州获得多少客户吗?尝试
$this->db->select('Client_state,count(*) as n');
$this->db->from('Clients');
$this->db->group_by('Client_state');
以上将输出:
Client_state | n
New York | 2
California | 2
Seattle | 2
是否要添加每个州的所有客户端的客户端 ID?尝试
$this->db->select('Client_state,sum(Client_id) as sum');
$this->db->from('Clients');
$this->db->group_by('Client_state');
以上将输出:
Client_state | sum
New York | 3
California | 7
Seattle | 11
请记住,在分组时,您需要具体说明您想要分组的内容以及您想要的结果是什么。
推荐阅读
- java - Windowbuilder 帮助 - 将组件添加到新框架
- java - 如何通过多进程java应用程序读取mongodb changestream数据?每个进程都应该得到唯一的数据
- c++ - 如何设置单个静态控件 C++ 的文本和背景颜色?
- laravel - 向雄辩的 Mongodb laravel 模型添加新文件
- doctrine - OrWhere 声明原则 1
- html - 如何制作一个覆盖屏幕所有区域的div,除了固定div覆盖的区域?
- java - Spring 测试仅在我的系统中失败
- javascript - 变量值固定为 0(函数内部)
- c++11 - 如何在数组中找到第k个元素?
- jenkins - 无法用 groovy 解析 xml