Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Postgresql的Mysql(GroupBy)替代方案?_Php_Mysql_Postgresql_Laravel_Eloquent - Fatal编程技术网

Php Postgresql的Mysql(GroupBy)替代方案?

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)

我正在使用laravel和mysql

我有类似的疑问

$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';这件事解决了我的问题…谢谢