首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果在另一种语言中为空,则选择语言中的值。

问如果在另一种语言中为空,则选择语言中的值。
EN

Stack Overflow用户
提问于 2011-09-26 14:14:16
回答 3查看 177关注 0票数 1

我有一张key_id, id, text, lang的桌子。

我需要用一种语言检索表中的所有文本字段(所以没有限制)。但是如果在这种语言中字段是空的,我需要用英语检索它。

示例:

代码语言:javascript
复制
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它是空的。

我怎么能做到呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-26 14:30:40

您的问题没有使表结构完全清楚,因此很难为您编写Sql。但是,我认为您要做的是选择单词的默认值(En)和当前(De)版本。因此,提供所选择的值是一个简单的问题。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2011-09-26 15:08:02

您可以使用mysql的非标准的无聚合组的功能,它不是按分组进行分组,而是为组中的每个值选择第一行。内部查询首先对数据进行排序,以便根据每个id的语言首选项对行排序。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 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‘就会有退路。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7556431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档