Ho una domanda come questa:group_concat multiple su diversi campi utilizzando 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
e la query funziona, ma non come previsto, perché se ho un prodotto con 5 sfaccettature e 1 immagine (supponiamo un'immagine con id = 7), quindi ottengo qualcosa di simile in "images_id":
"7,7,7,7,7"
Se ho 2 immagini (7 e 3), allora ottengo qualcosa del tipo:
"7,7,7,7,7,3,3,3,3,3"
e sfaccettature ottengo qualcosa di simile:
"8,7,6,5,4,8,7,6,5,4"
penso che MySQL sta facendo un certo tipo di unione delle differenti righe restituite dalla query e quindi concatenazione di tutto.
mio risultato atteso è (per l'ultimo esempio):
images_id = "7,3"
facets_id = "8,7,6,5,4"
posso ottenere che usando DISTINCT nel GROUP_CONCAT, ma poi ho un altro problema: Se ho due immagini con lo stesso titolo, una di queste è ommited, e poi ottengo qualcosa del tipo:
images_id = "7,3,5"
images_title = "Title7and3, Title5"
Quindi mi manca la relazione tra images_id e images_title.
Qualcuno sa se è possibile effettuare questa query in MySQL?
Forse sto complicando tutto senza alcun vantaggio reale. Sto provando a eseguire solo una query perché le prestazioni, ma ora non sono così sicuro se è ancora più veloce eseguire due query (una per selezionare le faccette e un'altra per le immagini per esempio).
Per favore, spieghi che cosa pensi sia la soluzione migliore per questo e perché.
Grazie!
Non capisco molto bene la query, ma sembra molto complessa, voglio dire, abbiamo bisogno di una sottoselezione con un gruppo per ogni concat? Sembra qualcosa di molto lento, non è più veloce 2 domande? – Enrique
@Enrique, non si tratta di velocità, ma di correttezza. Se il mio codice non ha bisogno di funzionare effettivamente posso fare tutto all'istante. – Johan
@Enrique, Non è necessaria una sottoselezione per ogni gruppo concat, solo per quelle tabelle in cui la corrispondenza con p.id restituisce più di 1 riga per p.id. – Johan