テーブルから複数の値をフェッチしようとしていますが、GROUP BYは列の1つのみを対象としています。物事を単純化するために、私は、一例として、モックアップゲストブックのテーブルを使用します:複数の列を持つMySQL:GROUP
postNumber | user | text | date | portal
-----------------------------------------------
1 | Michael | "nice blog" | 10/12| fitness
2 | Ronald | "hello!" | 12/12| lounge
1 | Michael | "beautiful" | 05/11| pictures
2 | Sandra | "great pic" | 10/12| pictures
のは、ゲストブックのフロントページには、最新のゲスト記事を印刷するが、唯一のポータル(フィットネス、ラウンジや写真)ごとにしなければならないと仮定しましょう。望ましい結果は次のようになります。
- マイケル/ "素敵なブログ" /フィットネス
- ロナルド/ "ハロー" /ラウンジ
- とサンドラ/ "偉大PIC" /絵。
除外された投稿は、そのポータルの最新のものではないため、マイケル/「美しい」/写真です。
次のクエリは、より近代的なMySQLサーバで無効で、エラーは以下の投げ:
SELECT max(postNumber), user, text, date, portal FROM guestbook GROUP BY portal;
GROUP BY句とに機能的に依存しない非集約列「database.table.columnName」を含みますGROUP BY句の列。これはsql_modeのと互換性がありません= ONLY_FULL_GROUP_BY
しかし、このより限定されたクエリは、以下の成果望ましい結果で動作しますが、それは私がいる何である残りの必要な列(ユーザー、テキスト、日付)、fecthすることはできません正確でトラブル:
SELECT max(postNumber), portal FROM guestbook GROUP BY portal;
最初のクエリがGROUP BYにユーザー、テキストや日付を追加することによって固定することも可能であるが、そのような複合グループ化を行うと、もはやポータルごとに1つだけのエントリを取得しないだろう。
誰かがこの問題の解決策を持っている場合は、私が自分で解決策を見つけることができなかったか、オンライン調査を通じて解決策を見つけてください。
編集:私はのように、左側のテーブル(のみのポータルおよびポスト番号)から私に値を与えているJOIN RIGHTなど何もありませんし、不明な点が次のクエリを試みている理由:
'SELECT t1.portal, max(t1.postNumber) from guestbook t1 RIGHT OUTER JOIN (SELECT * from guestbook) t2 on t1.postNumber = t2.postNumber GROUP BY portal LIMIT ?';
説明しているように(http://stackoverflow.com/questions/34115174/error-related-to-only-full-group-by-when-executing-a-query- [この回答に] ONLY_FULL_GROUP_BY無効にしてみてくださいすることができますin-mysql) – jonesy827
私が知っているのは、私が知っている限り、only_full_group_byがデフォルトになっていることを理解しています。そうでないと、緩やかなランダムな結果が得られ、より頑丈なSQLを作成するのがベストです。可能であれば、私は新しいmySQLのデフォルト設定と互換性のあるソリューションを実装したいと考えています –