tengo una consulta como esta:GROUP_CONCAT múltiple en diferentes campos usando MySQL
SELECT product.id,
GROUP_CONCAT(image.id) AS images_id,
GROUP_CONCAT(image.title) AS images_title,
GROUP_CONCAT(facet.id) AS facets_id
...
GROUP BY product.id
Y funciona la consulta, pero no como se esperaba, ya que si tengo un producto con 5 facetas y la imagen 1 (supongamos una imagen con id = 7), entonces obtengo algo como esto en "images_id":
"7,7,7,7,7"
Si tengo 2 imágenes (7 y 3), entonces obtengo algo así como:
"7,7,7,7,7,3,3,3,3,3"
y en facetas me sale algo como:
"8,7,6,5,4,8,7,6,5,4"
creo que MySQL está haciendo algún tipo de unión de los differents filas devueltas por la consulta y luego concatenando todo.
Mi resultado esperado es (para el último ejemplo):
images_id = "7,3"
facets_id = "8,7,6,5,4"
puedo obtener esa utilizando DISTINCT en GROUP_CONCAT, pero luego tengo otro problema: Si tengo dos imágenes con el mismo título, una de ellas es omitida, y luego aparece algo así como:
images_id = "7,3,5"
images_title = "Título 7 y 3, título 5"
Así que echo de menos la relación entre images_id y images_title.
¿Alguien sabe si es posible realizar esta consulta en MySQL?
Tal vez estoy complicando todo sin ningún beneficio real. Estoy tratando de ejecutar solo una consulta por el rendimiento, pero ahora no estoy tan seguro de si es aún más rápido ejecutar dos consultas (una para seleccionar las facetas y otra para las imágenes, por ejemplo).
Explique cuál cree que es la mejor solución para esto y por qué.
Gracias!
No entiendo muy bien su consulta, pero parece muy compleja, quiero decir, necesitamos una subselección con un grupo por cada concat? Parece algo muy lento, ¿no es más rápido 2 consultas? – Enrique
@Enrique, no se trata de velocidad, se trata de corrección. Si mi código no necesita funcionar realmente, puedo hacer todo al instante. – Johan
@Enrique, No necesita una sub-selección para cada grupo concat, solo para aquellas tablas donde el partido contra p.id devuelve más de 1 fila por p.id. – Johan