


Erläutern Sie die gemeinsame Tabellenaggregationsabfrage von ThinkPHP6 anhand von Beispielen
Vor ein paar Tagen fragte ein Freund nach der Aggregationsabfrage gemeinsamer Tabellen. Da ich der Meinung bin, dass dieses Problem für viele Anfänger schwierig zu bewältigen sein könnte, möchte ich es jetzt teilen.
Wir haben zwei Datentabellen:
Bustabelle:
Benutzertabelle:
Anforderung: Anzahl der Personen im Bus zählen
Wie erreicht man das?
Schritt 1: Tabellen verbinden
Dieses Szenario erfordert definitiv die Verknüpfung zweier Datentabellen.
$data=Db::name('user')->alias('a')->join('bus b','a.user_id=b.user_id')->select()->toArray();
Alias ist ein Alias, Join ist die Datentabelle der gemeinsamen Tabelle und es gibt eine gemeinsame Tabellenbedingung a.user_id=b.user_id, damit wir die Daten der beiden Datentabellen abrufen können.
Schritt 2: Aggregationsabfrage
Bevor wir die Aggregationsabfrage durchführen, werfen wir einen Blick auf die offizielles Handbuch-Tutorial.
Da wir letztendlich die Anzahl der Statistiken erhalten möchten, entscheiden wir uns zunächst für die Methode count() und ändern daher die Abfrageanweisung:
$data=Db::name('user')->alias('a')->field('count(b.user_id) AS c'')->join('bus b','a.user_id=b.user_id')->select()->toArray();
Darunter ist c, ein Alias.
Wir müssen eine aggregierte Abfrage basierend auf dem Feld user_id durchführen. Statistiken basieren auf diesem Feld, daher müssen wir eine Gruppe (user_id) sein, d. h. eine Gruppierung gemäß dem Feld user_id.
Wir modifizieren weiterhin die Abfrageanweisung:
$data=Db::name('user')->alias('a')->field('count(b.user_id) AS c')->join('bus b','a.user_id=b.user_id')->group('a.user_id')->select()->toArray();
Auf diese Weise erreichen wir unser endgültiges Abfrageergebnis.
Der dritte Punkt: Achten Sie auf die Situation
Wenn MySQL in der obigen Abfrageanweisung Version 5.7 ist, müssen Sie besonders darauf achten Aufmerksamkeit. Wenn Sie beispielsweise a.* zum Feld in mysql5.7 hinzufügen, wird ein Fehler gemeldet:
$data=Db::name('user')->alias('a')->field('a.*,count(b.user_id) AS c')->join('bus b','a.user_id=b.user_id')->group('a.user_id')->select()->toArray(); [object Object]
Warum gibt es einen solchen Fehler?
MYSQL5.7 hat Einschränkungen für sql_mode für eine bessere Leistung.
ONLY_FULL_GROUP_BY: Wenn bei der Aggregationsoperation GROUP BY die Spalte in SELECT nicht in GROUP BY erscheint, ist diese SQL ungültig, da sich die Spalte nicht in der GROUP BY-Klausel befindet, was eine Fehlerposition darstellt.
Wir können die MySQL-Konfiguration ändern:
Ändern Sie /etc/my.cnf und löschen Sie only_full_group_by in sql_mode=
Auf diese Weise Wenn wir auf dieses Problem stoßen, werden wir es entsprechend den endgültigen Anforderungen Schritt für Schritt aufteilen.
Das obige ist der detaillierte Inhalt vonErläutern Sie die gemeinsame Tabellenaggregationsabfrage von ThinkPHP6 anhand von Beispielen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

