Php Postgresql的Mysql(GroupBy)替代方案?
我正在使用laravel和mysql 我有类似的疑问Php Postgresql的Mysql(GroupBy)替代方案?,php,mysql,postgresql,laravel,eloquent,Php,Mysql,Postgresql,Laravel,Eloquent,我正在使用laravel和mysql 我有类似的疑问 $mix = Ergebnisse::where(function($q) use($result) { foreach ($result as $item) { $q->orWhere(function($q) use($item) { $q->where('temperatur', $item->temperatur)
$mix = Ergebnisse::where(function($q) use($result) {
foreach ($result as $item) {
$q->orWhere(function($q) use($item) {
$q->where('temperatur', $item->temperatur)
->where('zeit', $item->zeit);
});
}
})->groupBy('katogorie_id')->get();
在我的本地主机上,它工作正常,因为我在那里使用mysql。
但是我用Postgresql在Heroku上部署了这个项目
我犯了一个错误
SQLSTATE[42803]: Grouping error: 7 ERROR: column "ergebnisse.id" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: select * from "ergebnisse" where (("temperatur" = $1 and "ze...
^ (SQL: select * from "ergebnisse" where (("temperatur" = 85 and "zeit" = 35) or ("temperatur" = 85 and "zeit" = 30)) group by "katogorie_id")
在进一步搜索之后,我知道GroupBy与postgre不兼容。还有别的方法吗?谢谢您选择*但按katogorie_id分组。简而言之,您需要按您选择的所有列分组。这与MySQL接受非标准分组使用的旧行为形成对比
所以,要么通过向组中添加更多列,要么选择更少的列。我怀疑您是否需要选择*谢谢所有帮助我的人。我通过这个解决了这个问题
->distinct()->get(['katogorie_id']);
完整查询-
$result=Ergebnisse::where('name_id', $nam)->where('geometrie_id', $geo)->orWhere('name_id', $nam2)->orWhere('geometrie_id', $geo2)->get();
$mix = Ergebnisse::where(function($q) use($result) {
foreach ($result as $item) {
$q->orWhere(function($q) use($item) {
$q->where('temperatur', $item->temperatur)
->where('zeit', $item->zeit);
});
}
})->distinct()->get(['katogorie_id']);
GroupBy与postgre不兼容为什么?因为纯SQLs GROUP BY与postgresql很好地兼容。正如@Lukasz Kaminski评论的那样,它实际上与Mysql有点不同。对于一组katogorie_id,您希望得到哪一行?MySQL的回答是:呃,你没有指定,所以我将把随机的东西放在那里——PostgreSQL的回答是:你没有指定,所以这是一个错误。更正您的错误,我们可以再次交谈。可能的重复我不想要重复的katogories,因此,我只将katogorie:id放入groupby。现在,我将我的表的id与katogorie id放在一起,如下所示..->GroupB'id','katogorie'…但它显示了多个katogorie。感谢您的评论。实际上,我只需要按katogorie_id对其进行分组。。你能给我一些其他的解决方案吗?我认为在katogorie_id*上选择DISTINCT将给出与MySQL GROUP BY相同的ish结果。我不太熟悉MySQL old GROUP BY如何准确地决定返回哪些行。-->distinct->get['katogorie_id';这件事解决了我的问题…谢谢