我有一张key_id, id, text, lang
的表格。
我需要用语言(例如DE)检索表中的所有文本字段(所以没有限制),但如果使用这种语言字段为空,我需要用英语检索它。
示例:
key_id, id text lang
1 1 hi en
2 1 Guten Tag de
3 2 nothing en
4 2 '' de
我需要有结果,用语言搜索DE:
Guten
没有 - >这是因为在deutsch中它是空的......
我该怎么办?
答案 0 :(得分:1)
您的问题并没有使表结构完全清晰,因此很难为您编写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'
答案 1 :(得分:0)
您可以使用mysql的非标准group-by-aggregate功能,而不是分组,它为组中的每个值选择 first 行。内部查询首先对数据进行排序,以便按照每个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
答案 2 :(得分:0)
首先,我会为
等翻译提供单独的表格[t] id text
[t_translation] id语言文字
选择coalesce(t_translation.text,t.text)作为translated_text 从t left t_translation on t.id = t_translation.id where language ='de' 这样,如果没有'de'语言的记录,你就会有后备 (查询不完整,但你明白了)