-
Die Verwendung von GROUP_CONCAT() ruft normalerweise die Gruppieren-nach-Logik auf und erstellt temporäre Tabellen, die normalerweise ein großer Nachteil für die Leistung sind. Manchmal können Sie den richtigen Index hinzufügen, um die temporäre Tabelle in einer Group-By-Abfrage zu vermeiden, aber nicht in jedem Fall.
-
Wie @MarcB betont, ist die Standardlängenbegrenzung einer gruppenverketteten Zeichenfolge ziemlich kurz, und viele Leute wurden durch abgeschnittene Listen verwirrt. Sie können das Limit mit group_concat_max_len .
-
Das Explodieren eines Strings in ein Array in PHP ist nicht kostenlos. Nur weil Sie es in einem Funktionsaufruf in PHP tun können, heißt das nicht, dass es das Beste für die Leistung ist. Ich habe den Unterschied nicht gemessen, aber ich bezweifle, dass Sie das auch getan haben.
-
GROUP_CONCAT() ist ein MySQLismus. Es wird von anderen SQL-Produkten nicht umfassend unterstützt. In einigen Fällen (z. B. SQLite) haben sie eine GROUP_CONCAT()-Funktion, aber sie funktioniert nicht genau so wie in MySQL, sodass dies zu verwirrenden Fehlern führen kann, wenn Sie mehrere RDBMS-Backends unterstützen müssen. Wenn Sie sich keine Gedanken über die Portierung machen müssen, ist dies natürlich kein Problem.
-
Wenn Sie mehrere Spalten aus Ihren
currencies
abrufen möchten Tabelle, dann benötigen Sie mehrere GROUP_CONCAT()-Ausdrücke. Sind die Listen garantiert in der gleichen Reihenfolge? Das heißt, entspricht das dritte Feld in einer Liste dem dritten Feld in der nächsten Liste? Die Antwort ist nein – es sei denn, Sie geben die Bestellung mit einemORDER BY
an -Klausel in GROUP_CONCAT().
Normalerweise bevorzuge ich Ihr erstes Codeformat, verwende eine herkömmliche Ergebnismenge und schleife die Ergebnisse durch, speichere sie in einem neuen Array, das nach Client-ID indiziert ist, und hänge die Währungen an ein Array an. Dies ist eine unkomplizierte Lösung, hält die SQL einfach und leichter zu optimieren und funktioniert besser, wenn Sie mehrere Spalten abrufen müssen.
Ich versuche nicht zu sagen, GROUP_CONCAT() ist schlecht! Es ist in vielen Fällen wirklich nützlich. Aber der Versuch, eine Einheitsregel für die Verwendung (oder Vermeidung) einer Funktion oder eines Sprachfeatures aufzustellen, ist zu simpel.