首页 > 解决方案 > 数据库查询结果上的 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,一切都会正常运行,并且我可以毫无问题地在控制台中记录所有行!问题是我希望它们按状态分组!

请帮帮我!

标签: javascriptphpajaxcodeigniteractiverecord

解决方案


做 a 时Agroup by没有多大意义select *。不在 Codeigniter 的查询生成器上,不在 SQL 上

原因是分组旨在生成所有数据的分组摘要(行合并),但您并没有具体说明要对分组行做什么。

例如,获取您的样本数据。如果按州分组,client_idclient_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

请记住,在分组时,您需要具体说明您想要分组的内容以及您想要的结果是什么。


推荐阅读