Mysql kann keine nicht aggregierten Spalten auswählen

Mysql kann keine nicht aggregierten Spalten auswählen

1. Einleitung

Ich habe mein Blog kürzlich aktualisiert und unten auf der Artikelseite zwei Schaltflächen hinzugefügt, mit denen direkt zum vorherigen und nächsten Artikel gesprungen werden kann.

Wie in der folgenden Abbildung dargestellt:

Die Schwierigkeit bei der Implementierung dieser Funktion liegt darin: Wie wählt die Datenbank die beiden benachbarten Datensätze vor und nach einem Datensatz aus?

2. Datenbankdesign

Der Aufbau meiner Artikeldatenbank ist unten dargestellt:

Wie Sie sehen, ist die Identität jedes Datensatzes die Index-ID. Da viele Artikeldatensätze zuvor gelöscht wurden, sind die IDs nicht fortlaufend.

Wenn der Indexwert des aktuellen Artikels 33 ist, können Sie den folgenden Befehl verwenden, um die beiden benachbarten Artikel abzurufen:

Wählen Sie * aus der Passage, in der die ID enthalten ist
(wählen
Fall
wenn SIGN(id - 32)>0, DANN MIN(id)
wenn SIGN(id - 32)<0, DANN MAX(id)
Ende
aus der Passage
wobei id != 34
GROUP BY SIGN(id - 32 )
ORDER BY SIGN(id - 32)
)
BESTELLEN NACH ID;

3. Aggregatspalten können nicht ausgewählt werden

Beim Ausführen des obigen Befehls gab Mysql einen Fehler aus: SELECT list is not in GROUP BY clause ... Von Google habe ich erfahren, dass in MySQL 5.7 und höher „ only_full_group_by standardmäßig aktiviert ist und MySQL Abfragen ablehnt, auf die durch Auswahllisten, Bedingungen oder Sequenzlisten verwiesen wird.

Nachfolgend der Originaltext:

Lehnen Sie Abfragen ab, deren Auswahlliste, HAVING-Bedingung oder ORDER BY-Liste auf nicht aggregierte Spalten verweisen, die weder in der GROUP BY-Klausel benannt sind noch funktional von GROUP BY-Spalten abhängig sind (eindeutig bestimmt durch diese). Ab MySQL 5.7.5 umfasst der Standard-SQL-Modus ONLY_FULL_GROUP_BY. (Vor 5.7.5 erkennt MySQL keine funktionale Abhängigkeit und ONLY_FULL_GROUP_BY ist standardmäßig nicht aktiviert. Eine Beschreibung des Verhaltens vor 5.7.5 finden Sie im MySQL 5.6-Referenzhandbuch.)

Daher sollten wir sql_mode so einstellen, dass only_full_group_by nicht enthalten ist. Nach MySQL 5.7.5 wird only_full_group_by eine der Standardoptionen von sql_mode, was dazu führen kann, dass einige SQL-Anweisungen fehlschlagen.

Öffnen Sie die MySQL-Konfigurationsdatei, fügen Sie im Abschnitt [mysqld] die folgende Konfiguration hinzu und starten Sie MySQL neu.

[mysqld]
# ... andere Konfiguration
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATEERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION # lösche 'only_full_group_by'
# ... andere Konfiguration

Führen Sie den MySQL-Befehl im zweiten Teil dieses Artikels aus. Das Ergebnis ist wie folgt:

4. Weiterführende Links

nur_vollständig_gruppieren_nach

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:
  • Nutzungs- und Leistungsoptimierungstechniken für die Aggregatfunktion „count“ in MySQL
  • Detaillierte Erläuterung der häufig verwendeten MySQL-Aggregatfunktionen
  • So fügen Sie bedingte Ausdrücke zu Aggregatfunktionen in MySql hinzu
  • php+mysql Open Source XNA-Aggregationsprogramm zum Download freigegeben
  • Detaillierte Erläuterung von Beispielen für MySQL-Einzeltabellenabfragevorgänge [Syntax, Einschränkungen, Gruppierung, Aggregation, Filterung, Sortierung usw.]
  • Analyse der Verwendung von MySQL-Abfragesortierung und Abfrageaggregationsfunktionen
  • MySQL verwendet Aggregatfunktionen zum Abfragen einer einzelnen Tabelle
  • MySQL-Gruppierungsabfragen und Aggregatfunktionen
  • Analyse des Prinzips und der Verwendung der kontinuierlichen MySQL-Aggregation
  • Optimieren der langsamen Abfrage von MySQL-Aggregatstatistikdaten

<<:  Detaillierte Erklärung der Lösung für das Problem, dass die Nohup-Protokollausgabe unter Linux zu groß ist

>>:  React-Diagramm Serialisierung JSON Interpretation Fallanalyse

Artikel empfehlen

4 Scan-Tools für den Linux-Desktop

Obwohl die papierlose Welt noch nicht angebrochen...

Detaillierte Erklärung des this-Zeigeproblems in JavaScript

Zusammenfassen Globale Umgebung ➡️ Fenster Normal...

Lösung für das Problem mit verstümmelten chinesischen MySQL-Zeichen

1. Die chinesischen verstümmelten Zeichen erschei...

Lösen Sie das Problem beim Laden der Vektorkartenquelle in OpenLayers 3

1. Vektorkarte Vektorgrafiken verwenden gerade Li...

Vue-Plugin-Fehler: Auf dieser Seite wurde Vue.js erkannt. Problem gelöst

Das Vue-Plugin meldet einen Fehler: Vue.js wurde ...

CSS-Code zum Anordnen von Fotos in Moments

Zunächst können Sie Moments öffnen und mehrere La...

Detaillierte Erklärung der benutzerdefinierten Swiper-Komponente in JavaScript

Inhaltsverzeichnis Effektanzeige Komponenteneinst...

Detaillierte Erklärung der MySQL-Berechtigungen und -Indizes

MySQL-Berechtigungen und Indizes Der höchste Benu...

WeChat-Applet-Picker - Mehrspalten-Selektor (Modus = MultiSelector)

Inhaltsverzeichnis 1. Wirkungsdiagramm (mehrere S...

Mehrere Möglichkeiten zum Zentrieren einer Box in der Webentwicklung

1. Notieren Sie mehrere Methoden zum Zentrieren d...

Konfigurationsmethode für das Nginx-Anforderungslimit

Nginx ist ein leistungsstarker, leistungsstarker ...