翻译查询

时间:2011-08-27 11:05:18

标签: mysql internationalization

我有一个带翻译的MySQL表。现在我正在搜索一个查询,它返回与给定语言列表匹配的第一个翻译:

让我们说有一个字符串的4个翻译:

id          lang     translation
--------------------------------
greeting    en       hey!
greeting    de       Hallo.
greeting    de_at    Servus!
greeting    de_ch    Grüezi

查询的期望结果取决于给定的语言列表:

language list    result
-----------------------
de,en            Hallo.
en,de            hey!
de_at,de,en      Servus!

这可以在一个查询中实现吗?

2 个答案:

答案 0 :(得分:1)

试试这个:

SELECT * FROM translations t WHERE id = 'greeting' AND lang IN ('de_at', 'de', 'en') ORDER BY FIELD(lang, 'de_at', 'de', 'en') LIMIT 1

答案 1 :(得分:1)

SELECT COALESCE( de_at.translation, de.translation, en.translation )
  FROM (SELECT 'greeting' AS id) AS id
  LEFT JOIN translations AS de_at ON( de_at.lang = 'de_at' AND id.id = de_at.id )
  LEFT JOIN translations AS de ON( de.lang = 'de' AND id.id = de.id )
  LEFT JOIN translations AS en ON( en.lang = 'en' AND id.id = en.id )

我应该赞扬Eddy这项技术。