2016-12-16 9 views
2

ONLY_FULL_GROUP_BY私は自分のローカル環境での奇妙な問題があります。これは、例えば、いくつかのプラグインが、しようと、このいずれかに遭遇 wamp64 のMySQL 5.7.14 OctoberCMS 38210月CMS - sql_modeのと互換性のないSQL要求は=

をバックエンド

構文エラーまたはアクセス違反のスライドのリストを表示するには: ORDER BY句の1055年式#1は、GROUP BY句ではありませんし、ある非凝集列 「dbname.flosch_slideshow_slides.sort_order」を含みますいいえt は機能的にはGROUP BY句の列に依存します。 。。

選択flosch_slideshow_slidesslideshow_idを、(カウント*)カウントとして

flosch_slideshow_slides

からflosch_slideshow_slidesslideshow_id(2:

これはsql_modeの= ONLY_FULL_GROUP_BY

(SQLと互換性がありません、1)

グループby flosch_slideshow_slidessort_order ASC

によってslideshow_id

順)

わずかに異なる他の例を示します。構文エラーまたはアクセス違反:1055式#SELECTリストの51 がGROUP BY句ではなく、非凝集 列を含む '

SQLSTATE [42000]フロントエンド上の製品のリストを表示しようとするこれdbname.jiri_jkshop_products_categories.category_id ' は、機能的にはGROUP BY句の列に依存しません。

これは

ONLY_FULL_GROUP_BY sql_modeの=と互換性がありません(SQL:

はインナーjiri_jkshop_products SELECT * FROMはid = jiri_jkshop_products_categoriesjiri_jkshop_products_categoriesに参加します。

バックエンド\挙動\ ListController: title ASC

によってid順序によって= 1 activecategory_id(8)およびvisibility = 1群)

これらの要求は、ここでトリガされproduct_id - > listRender()

だから私はそれに手を持っていない

私はそれがもう一つの興味深い点は以来、私は(バージョン365から382まで)システム用の最新の更新プログラムと、すべてのプラグインを適用することである

リモートサーバーで、私のチームメイトのローカル環境で完璧に動作するように指定

インストールされます。その後、テストするために、私は、リモートサーバー上で同じことをやったし、それはまだ

に動作します私は主にローカルで動作するように、これは非常に非常に迷惑です

はそれを修正するためにあなたにいくつかのアイデアがありますか?理想的にせずに今のmysql/sql_modeのに長い時間のために

おかげ&について、 パトリック

+0

[mysql 5.6のANY \ _VALUE機能はありますか?](http://stackoverflow.com/questions/37089347/is-there-any-value-capability-for-mysql-5-6) – e4c5

答えて

2

を変更し、MySQLは効率の名の下に型破りの行動を可能にGROUP BYに悪名高い非標準の拡張を含んでいました。この拡張により、世界中の無数の開発者が、何をしているのかを理解せずに、生産コードでGROUP BYを使用することができました。

GROUP BY句で列を列挙する必要があるため、特にGROUP BYクエリでSELECT *を使用するのは愚かです。多くの開発者はこのように愚かである。

これをお読みください。 https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html

MySQLチームは、生産コードを乱すことなくこの誤った部分を修正しようとしています。彼らは、ONLY_FULL_GROUP_BYという名前の5.7.5にsql_modeフラグを付け加えて、標準的な動作を強制しました。最近のリリースでは、デフォルトでフラグをオンにしていました。ローカルMySQLを5.7.14にアップグレードすると、フラグがオンになり、以前の拡張機能に依存するプロダクションコードが機能しなくなりました。

あなたの選択は?

  1. 問題のSQLクエリを修正するか、プラグインの作成者に修正を依頼してください。
  2. あなたが使用しているアプリケーションソフトウェアを使用して、すぐに使用できるMySQL互換バージョンにロールバックしてください。
  3. サーバーのsql_modeを変更して、新しく設定したONLY_FULL_GROUP_BYモードを削除します。

SETコマンドを使用してモードを変更できます。

SET sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' 

は、アプリケーションがMySQLに接続した直後に行うべきことです。

the init file in your MySQL installationが見つかり、sql_mode=行を見つけてONLY_FULL_GROUP_BYを省略して変更し、サーバーを再起動します。

その最初の嫌なクエリですか?このようにsort_orderGROUP BY節に追加してください。

select flosch_slideshow_slides.slideshow_id, count(*) as count 
    from flosch_slideshow_slides 
where flosch_slideshow_slides.slideshow_id in (2, 1) 
group by flosch_slideshow_slides.slideshow_id, sort_order 
order by sort_order asc 

これは何か壊れますか?おそらくそうではありません。

2番目に違反しているクエリはありますか?それにはSELECT *が含まれているため、GROUP BY節を修正する前に、実際にどの列が使用されているかを調べるために、クエリを囲むコードを解読する必要があります。これがプラグインの場合、その仕事はその作者によって最もうまくいくでしょう。

+0

おかげでミスタージョーンズ、ありがとう、すごい返信、私はプラグインの作者に通知し、私は関連するクエリを修正しようとします。 –

関連する問題