-
Het gebruik van GROUP_CONCAT() roept meestal de group-by-logica op en creëert tijdelijke tabellen, die meestal een groot negatief effect hebben op de prestaties. Soms kun je de juiste index toevoegen om de tijdelijke tabel in een group-by-query te vermijden, maar niet in alle gevallen.
-
Zoals @MarcB opmerkt, is de standaardlengtelimiet van een groep-aaneengeschakelde string vrij kort, en veel mensen zijn in de war door afgekapte lijsten. U kunt de limiet verhogen met group_concat_max_len .
-
Het exploderen van een string in een array in PHP is niet gratis. Alleen omdat je het in één functieaanroep in PHP kunt doen, wil nog niet zeggen dat het het beste is voor de prestaties. Ik heb het verschil niet gebenchmarkt, maar ik betwijfel of jij dat ook hebt gedaan.
-
GROUP_CONCAT() is een MySQLism. Het wordt niet breed ondersteund door andere SQL-producten. In sommige gevallen (bijv. SQLite) hebben ze een GROUP_CONCAT()-functie, maar deze werkt niet precies hetzelfde als in MySQL, dus dit kan tot verwarrende bugs leiden als je meerdere RDBMS-back-ends moet ondersteunen. Als u zich geen zorgen hoeft te maken over het overzetten, is dit natuurlijk geen probleem.
-
Als u meerdere kolommen wilt ophalen uit uw
currencies
tabel, dan hebt u meerdere GROUP_CONCAT()-expressies nodig. Staan de lijsten gegarandeerd in dezelfde volgorde? Dat wil zeggen, komt het derde veld in de ene lijst overeen met het derde veld in de volgende lijst? Het antwoord is nee -- niet tenzij je de bestelling specificeert met eenORDER BY
clausule binnen de GROUP_CONCAT().
Ik geef meestal de voorkeur aan je eerste code-indeling, gebruik een conventionele resultatenset en loop over de resultaten, sla op in een nieuwe array die is geïndexeerd op client-ID, en voeg de valuta's toe aan een array. Dit is een rechttoe rechtaan oplossing, houdt de SQL eenvoudig en gemakkelijker te optimaliseren, en werkt beter als u meerdere kolommen moet ophalen.
Ik probeer niet te zeggen dat GROUP_CONCAT() slecht is! Het is in veel gevallen erg handig. Maar proberen om een uniforme regel te maken om een functie of taalfunctie te gebruiken (of te vermijden), is simplistisch.