La mia domanda riguarda l'ottimizzazione e le buone pratiche di MySQL.MySQL: ORDINA PER CAMPO/GRUPPO PER
Devo ottenere l'elenco di testi tradotti con preferenza di ordine: se non riesco a trovare il testo in inglese, voglio usare il testo francese e se non esiste, voglio usare lo spagnolo.
In altre parole, ho:
id lang text
1 fr text_FR
1 en text_EN
1 es text_ES
2 fr text_FR2
3 fr text_FR3
3 es text_ES3
E voglio:
id lang text
1 en text_EN
2 fr text_FR2
3 fr text_FR3
così ho letto alcuni argomenti come this, this, that o that. Ok. Ho provato questo:
SELECT text FROM (
SELECT id, text
FROM translation
ORDER BY FIELD(lang, 'en', 'fr', 'es')
) tt GROUP BY tt.id;
Ma, quando spiego questa query, posso leggere:
id select_type table partitions type possible_keys key key_len ref rows Extra
1 PRIMARY <derived2> NULL ALL NULL NULL NULL NULL 4 Using temporary; Using filesort
2 DERIVED translation NULL ALL PRIMARY PRIMARY 52 1641 Using filesort
quindi non è ottimizzata, a causa della sottoquery. Posso evitare questa subquery?
Interessante, non sapeva di 'COALESCE'! – xiankai