-
El uso de GROUP_CONCAT() normalmente invoca la lógica de agrupación y crea tablas temporales, que suelen ser un gran inconveniente para el rendimiento. A veces puede agregar el índice correcto para evitar la tabla temporal en una consulta de grupo, pero no en todos los casos.
-
Como señala @MarcB, el límite de longitud predeterminado de una cadena concatenada por grupos es bastante corto, y muchas personas se han confundido con las listas truncadas. Puede aumentar el límite con group_concat_max_len .
-
Explotar una cadena en una matriz en PHP no es gratis. El hecho de que pueda hacerlo en una llamada de función en PHP no significa que sea el mejor para el rendimiento. No he comparado la diferencia, pero dudo que tú lo hayas hecho.
-
GROUP_CONCAT() es un MySQLismo. No es ampliamente compatible con otros productos SQL. En algunos casos (por ejemplo, SQLite), tienen una función GROUP_CONCAT(), pero no funciona exactamente igual que en MySQL, por lo que esto puede generar errores confusos si tiene que admitir múltiples back-ends RDBMS. Por supuesto, si no necesita preocuparse por la portabilidad, esto no es un problema.
-
Si desea obtener varias columnas de sus
currencies
tabla, entonces necesita varias expresiones GROUP_CONCAT(). ¿Se garantiza que las listas estén en el mismo orden? Es decir, ¿el tercer campo de una lista corresponde al tercer campo de la siguiente lista? La respuesta es no, no a menos que especifique el orden con unORDER BY
cláusula dentro de GROUP_CONCAT().
Por lo general, prefiero su primer formato de código, uso un conjunto de resultados convencional y recorro los resultados, guardándolos en una nueva matriz indexada por ID de cliente, agregando las monedas a una matriz. Esta es una solución sencilla, mantiene el SQL simple y más fácil de optimizar, y funciona mejor si tiene varias columnas para buscar.
¡No estoy tratando de decir que GROUP_CONCAT() es malo! Es realmente útil en muchos casos. Pero tratar de hacer una regla única para usar (o evitar) cualquier función o característica del lenguaje es simplista.