我的问题是关于MySQL优化和良好实践。
我需要获取一个翻译文本列表,按照优先顺序:如果找不到英文文本,我想使用法语文本;如果法语文本也不存在,我想使用西班牙语。
换句话说,我有:
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
我想要:
id lang text
1 en text_EN
2 fr text_FR2
3 fr text_FR3
所以我阅读了一些主题,如this,this,that或that。好的。 我尝试了这个:
SELECT text FROM (
SELECT id, text
FROM translation
ORDER BY FIELD(lang, 'en', 'fr', 'es')
) tt GROUP BY tt.id;
然而,当我解释这个查询时,我能够阅读:
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
因为子查询,所以它没有被优化。我能避免这个子查询吗?
COALESCE
! - xiankai