所以我有以下简单的数据库表来简化事情
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,一切正常,我就可以毫无问题地在控制台中记录所有行!问题是我希望它们按州分组!
请帮帮我!
MySQL无法在本地执行此操作。你必须得到你需要的东西,然后使用编程语言(在这种情况下可能是PHP(迭代循环。这是该算法外观的简单版本。
public function client_results(){
$this->db->select('*');
$query = $this->db->get('Clients');
$results = $query->result_array();
$groupedResults = array();
foreach($results as $row) {
if (!array_key_exists($row->Client_state, $groupedResults)) {
$groupedResults[$row->Client_state] = array();
}
$groupedResults[$row->Client_state][] = $row->Client_name;
}
return $groupedResults;
}
>group by
在执行select *
时没有多大意义。不在 Codeigniter 的 Query Builder 上,不在 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
请记住,在分组时,您需要具体说明要分组的内容以及所需的结果。