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

Native Js-Implementierung des Kalender-Widgets

In diesem Artikelbeispiel wird der spezifische JS...

JavaScript zum Erzielen eines Digitaluhreffekts

In diesem Artikelbeispiel wird der spezifische Ja...

Detaillierte Erklärung der wechselseitigen Verwendung von Ref in React

Inhaltsverzeichnis 1. Lassen Sie uns zunächst erk...

Implementierung von React Routing Guard (Routing-Interception)

React unterscheidet sich von Vue. Es implementier...

Mit CSS3 erstellter Hover-Zoom-Effekt

Ergebnis:Implementierungscode: html <link href...

jQuery implementiert Warenkorbfunktion

In diesem Artikelbeispiel wird der spezifische Co...

Umfassendes Verständnis der Node-Ereignisschleife

Inhaltsverzeichnis Knoten-Ereignisschleife Ereign...

Installationstutorial für Docker unter Linux

Das Docker-Paket ist bereits im Standard-Reposito...

Vor- und Nachteile von Vite und Vue CLI

Es gibt im Vue-Ökosystem ein neues Build-Tool nam...

Detaillierte Erklärung der Verwendung des Bash-Befehls

Unter Linux wird Bash als Standard übernommen, wa...

Einrichten von VMware vSphere in VMware Workstation (Grafisches Tutorial)

VMware vSphere ist die branchenführende und zuver...