我有一张key_id, id, text, lang的桌子。
我需要用一种语言检索表中的所有文本字段(所以没有限制)。但是如果在这种语言中字段是空的,我需要用英语检索它。
示例:
key_id, id text lang
1 1 hi en
2 1 Guten Tag de
3 2 nothing en
4 2 '' de我需要得到结果,用DE语言搜索:
Guten
nothing ->这是因为在deutsch它是空的。
我怎么能做到呢?
发布于 2011-09-26 14:30:40
您的问题没有使表结构完全清楚,因此很难为您编写Sql。但是,我认为您要做的是选择单词的默认值(En)和当前(De)版本。因此,提供所选择的值是一个简单的问题。
select ifnull(de.text, en.text)
from
words de
join words en on
en.id = de.id and
en.lang = 'en'
where de.lang = 'de'发布于 2011-09-26 15:08:02
您可以使用mysql的非标准的无聚合组的功能,它不是按分组进行分组,而是为组中的每个值选择第一行。内部查询首先对数据进行排序,以便根据每个id的语言首选项对行排序。
select * from (
select id, text, lang
from lang_table
order by id, field(lang, 'de', 'en') -- this provides the custom ordering preference. you can add more languages as you like
) x
group by id; -- this captures the first (preferred language) row for each id发布于 2014-01-31 02:04:36
首先,我将有一个独立的表,用于翻译,例如
T id文本
t_translation id语言文本
选择coalesce(t_translation.text,t.text)作为translated_text,从t左加入t_translation on t.id=t_translation.id;如果没有使用“de”语言的记录(查询还没有完成,但您知道了),那么language = 'de‘就会有退路。
https://stackoverflow.com/questions/7556431
复制相似问题