2011-09-26 78 views
1

我有一个表格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
什么
- >这是因为在德语它是空的......

我该怎么办?

+0

为什么你不只是检索所有的语言,并选择你想要的任何你的程序逻辑? – m0skit0

+0

你能说得更具描述性吗? –

回答

1

你的问题犯规使表结构完全清楚,所以这是很难编写SQL你。不过,我认为你想要做的是选择单词的默认(en)值和AND当前(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' 
0

您可以使用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 
0

第一我将不得不为翻译单独的表等

[T] ID文本

[t_translation] ID语言文本

选择聚结(t_translation.text,t.text)如在t translated_text 左加入t_translation上t.id = t_translation.id其中language =“德” 这种方式,您有回退是否有与“德”的语言 没有记录(查询不完整,但你明白了)

相关问题