如果另一个是空的,请选择语言中的值

时间:2011-09-26 14:14:17

标签: mysql

我有一张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中它是空的......

我该怎么办?

3 个答案:

答案 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'语言的记录,你就会有后备 (查询不完整,但你明白了)