Finden Sie das Problem Nach dem Upgrade von MySQL auf MySQL 5.7 vor kurzem, bei der Durchführung einiger Group-by-Abfragen, wie der folgenden SELECT *, count(id) als Anzahl FROM `news` GROUP BY `group_id` ORDER BY `inputtime` DESC LIMIT 20 Der folgende Fehler wird gemeldet: Die SELECT-Liste befindet sich nicht in der GROUP BY-Klausel und enthält die nicht aggregierte Spalte „news.id“, die funktional nicht von den Spalten in der GROUP BY-Klausel abhängig ist. Dies ist nicht kompatibel mit sql_mode=only_full_group_by. Ursachenanalyse Der Grund liegt im MySQL 5.7-Modus. ONLY_FULL_GROUP_BY ist standardmäßig aktiviert. ONLY_FULL_GROUP_BY ist ein von MySQL bereitgestellter SQL-Modus, der verwendet wird, um die Gültigkeit der GROUP BY-Klausel der SQL-Anweisung zu überprüfen. http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_only_full_group_by Dies ist nicht kompatibel Später stellte ich fest, dass die Felder der Sortierbedingung „Sortieren nach“ auch in der Gruppe „Gruppieren nach“ enthalten sein müssen und die Sortierfelder auch aus den Gruppierungsfeldern übernommen werden. Wenn Sie es nicht verstehen, können Sie ja mal vorbeikommen und nachschauen. Lösung: 1. Entfernen Sie ONLY_FULL_GROUP_BY, um SQL normal auszuführen. 2. Wenn ONLY_FULL_GROUP_BY nicht ausgewählt ist, müssen alle ausgewählten Felder in den Gruppierungsbedingungen enthalten sein (mit Ausnahme von Feldern, die Funktionen enthalten). (Wenn dieses Problem auch bei „order by“ auftritt, müssen die „order by“-Felder ebenfalls in „group by“ enthalten sein.) 3. Verwenden Sie Diese Funktion ist für GROUP BY-Abfragen nützlich, wenn der SQL-Modus ONLY_FULL_GROUP_BY aktiviert ist, und zwar für Fälle, in denen MySQL eine Abfrage ablehnt, von der Sie wissen, dass sie gültig ist, aus Gründen, die MySQL nicht ermitteln kann. Der Rückgabewert und -typ der Funktion sind dieselben wie der Rückgabewert und -typ ihres Arguments, aber das Funktionsergebnis wird für den SQL-Modus ONLY_FULL_GROUP_BY nicht überprüft. Die obige SQL-Anweisung kann wie folgt geschrieben werden: SELECT ANY_VALUE(id)als ID,ANY_VALUE(uid) als uid ,ANY_VALUE(username) als Benutzername,ANY_VALUE(title) als Titel,ANY_VALUE(author) als Autor,ANY_VALUE(thumb) als Daumen,ANY_VALUE(description) als Beschreibung,ANY_VALUE(content) als Inhalt,ANY_VALUE(linkurl) als linkurl,ANY_VALUE(url) als URL,ANY_VALUE(group_id) als group_id,ANY_VALUE(inputtime) als Eingabezeit, count(id) als Anzahl FROM `news` GROUP BY `group_id` ORDER BY ANY_VALUE(inputtime) DESC LIMIT 20 Ich habe die dritte Methode gewählt. Zusammenfassen Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Das könnte Sie auch interessieren:
|
Inhaltsverzeichnis Was ist React Fiber? Warum Rea...
Bevor wir über die Datenreaktivität sprechen, müs...
Das Shell-Skript richtet die Zugriffskontrolle ei...
Mit dem Tag <tfoot> wird der Stil der Tabel...
Die Fähigkeiten, die Front-End-Entwickler beherrs...
Inhaltsverzeichnis Login-Geschäftsprozess Impleme...
1. Python 3 herunterladen wget https://www.python...
Nginx unterstützt drei Möglichkeiten zum Konfigur...
1. Verwendung von instanceof Mit instanceof wird ...
1. Grundlegende Konzepte 1. Sitemesh ist eine Sei...
<br />Original-URL: http://www.lxdong.com/po...
Heute empfehle ich ein solches Open-Source-Tool z...
Inhaltsverzeichnis Zuerst müssen wir das Seitenla...
Vorwort BINARY und VARBINARY ähneln in gewisser W...
CSS-Viewport-Einheiten gibt es schon seit einigen...