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

So stellen Sie ein Vue-Projekt unter Nginx bereit

Heute werde ich den Server nginx verwenden und mu...

Über das WeChat-Gleitproblem des UniApp-Editors

Das Uniapp-Applet wird ein ähnliches Dropdown-Pro...

So ändern Sie das MySQL-Tabellenpartitionierungsprogramm

So ändern Sie das MySQL-Tabellenpartitionierungsp...

Vue implementiert einfache Rechnerfunktion

In diesem Artikelbeispiel wird der spezifische Co...

Zabbix konfiguriert DingTalks Alarmfunktion mit Bildern

Umsetzungsideen: Zunächst müssen die Alarminforma...

Eine kurze Diskussion über die Anpassung mobiler Endgeräte

Vorwort Beim Schreiben von Front-End-Code kommt m...

Der Unterschied zwischen KEY, PRIMARY KEY, UNIQUE KEY und INDEX in MySQL

Das im Titel angesprochene Problem lässt sich sch...

Singleton-Entwurfsmuster in JavaScript

Inhaltsverzeichnis 1. Was ist ein Entwurfsmuster?...

Das WeChat-Applet wählt die Bildsteuerung

In diesem Artikelbeispiel wird der spezifische Co...

Zusammenfassung der bei der Arbeit häufig verwendeten Linux-Befehle

Verwenden Sie bei der Arbeit mehr Open-Source-Too...

JavaScript zur Implementierung eines einfachen Web-Rechners

Hintergrund Da ich einem neuen Projektteam zugewi...

Anweisungen zur Verwendung der MySQL-IndexOF-Funktion

Wie unten dargestellt: LOCATE(Teilzeichenfolge,Ze...

Objektorientierte Programmierung mit XHTML und CSS

<br />Wenn XHTML und CSS nur objektorientier...