sql >> データベース >  >> RDS >> Mysql

Laravelのページ付けを使用するとMySQLエラーがスローされます

    MySQL 5.6でSQLモードONLY_FULL_GROUP_BYを設定することは可能ですが、デフォルトでは設定されていません( https://dev.mysql.com/doc/refman/5.6/en/sql-mode.html )。

    ああ、あなたのコメントが上に表示されているのがわかります。ローカルサーバー(MySQL 5.7)でONLY_FULL_GROUP_BYが設定されていることを確認しました。

    問題の説明で何かを間違えたと思います。ローカルにONLY_FULL_GROUP_BYがあり、ライブにない場合は、ローカルサーバーでエラーが発生するはずですが、ライブサーバーでは発生しません。

    開発では、本番環境で使用しているバージョンと同じバージョンを使用し、同じSQLモードと一致していることを確認することをお勧めします。これにより、開発中の混乱を防ぐことができます。

    PHPのバージョンについても同じ提案をします。開発でいくつかの新しいPHP7機能を使用してから、PHP 5.6ライブサーバーにデプロイすると、それらは機能しません。

    説明するSQLは問題ないはずです:

    select count(*) as aggregate from `parameter_log_site_detail` where `site_id` = EPE
    

    ONLY_FULL_GROUP_BYがある場合でも、これは実際には問題ありません。 select count(*)を実行することは確かに合法です テーブル内の一致するすべての行の。このクエリにはGROUPBY句は必要ありません。

    ただし、集約された列と集約されていない列を混在させると、集約されていない列があいまいになるため、ONLY_FULL_GROUP_BY要件に違反することになります。

    select id, count(*) as aggregate from ...
    

    クエリを準備する前に、Laravelが選択リストに余分な列を挿入しているのではないかと思います。確実にMySQLクエリログを有効にする必要があります。

    Laravelの問題についてこのエラーについての議論があることに気づきました: https://github.com / laravel / framework / issues / 15232

    そのスレッドのいくつかのユーザーが問題を修正すると言った解決策は、'strict'=>falseを設定することです Laravel config/database.phpにあります。

    しかし、根本的な原因は、LaravelがSQLクエリを変更していることだと思います。




    1. 列dbo、ユーザー定義関数、または集計dbo.Splitfnが見つからないか、名前があいまいです

    2. MySQL:2つの結果セットの違い

    3. SQLクエリ結果の列名として列値を設定する

    4. Laravel4はRAWクエリ全体を実行できません