php-主义-选择所有字段并按其中之一分组
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php-主义-选择所有字段并按其中之一分组,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1519字,纯文字阅读大概需要3分钟。
内容图文
![php-主义-选择所有字段并按其中之一分组](/upload/InfoBanner/zyjiaocheng/683/96ffb7025ae842219e01937b71af9fd6.jpg)
我正在尝试创建一个带有学说的查询,该查询在SQL中基本上应该看起来像这样:
SELECT p.* FROM some_tabel AS p GROUP BY p.type;
所以我结束了,因为这是我发现的最接近的记录:
private function getAll()
{
//$this->em => Entity Manager
return $this->em->createQueryBuilder()
->select('p')
->from('AppBundle:Robots', 'p')
->groupBy('p.type')
->getQuery()
->getResult(Query::HYDRATE_ARRAY);
}
该错误告诉我未选择“ p.type”.
我该如何工作?
更新
如@Felippe Duarte的公认答案中所述,似乎Mysql的分组是一种有线连接.即使我跑步:
SELECT p.*, max(p.id) FROM some_tabel AS p GROUP BY p.type;
正如许多答案所建议的那样,结果不是我所期望的,因为仅包括每种类型的第一项,并且没有发生真正的分组.
排序而不是分组的选项很好,但是仍然给我一些处理,因此在这种情况下是多余的.
最后这段代码满足了我的需要:
private function groupByType(array $robots)
{
return array_reduce($robots,
function($list, $robot)
{
$list[$robot->getType()][] = $robot;
return $list;
}, []);
}
因为这不是太多的代码,并且不会有太多的“机器人”,所以我决定-遵循KISS范例-这是首选的解决方案.
解决方法:
您不能按单个列分组,然后选择其他列. MySQL具有此“错误”,允许用户在选择许多列的同时按一列分组.
换句话说,您必须按未使用聚合函数的所有列进行分组,例如SUM,AVG,MAX,COUNT.
MySQL的“功能”的副作用是,即使它不代表事实,也将返回其他列的第一个结果.
试试这个脚本:
create table test(id int, name char(1), value1 int);
insert into test values(1, 'a', 1);
insert into test values(2, 'b', 1);
select name, value1, max(id) from test group by value1;
“预期”输出:
name: 'b', value1: 1, max(id): 2
实际输出:
name: 'a', value1: 1, max(id): 2
内容总结
以上是互联网集市为您收集整理的php-主义-选择所有字段并按其中之一分组全部内容,希望文章能够帮你解决php-主义-选择所有字段并按其中之一分组所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。