MySQL通过键选择行或回退以默认键选择 [英] MySQL Select rows by a key or fall back to select by default key

查看:109
本文介绍了MySQL通过键选择行或回退以默认键选择的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在MySQL中有以下语言表,用于选择其他语言的文本.

I have the following language table in MySQL to select text in different languages.

CREATE TABLE `lang` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`group` INT(10) UNSIGNED NOT NULL,
`text` VARCHAR(255) NULL DEFAULT NULL,
`language` VARCHAR(10) NOT NULL DEFAULT 'def',
PRIMARY KEY (`id`),
UNIQUE INDEX `group_language` (`group`, `language`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
ROW_FORMAT=DEFAULT

该表包含以下数据

id  group  text               language
1   1      This is English    def
2   2      Helo sir           def
3   3      how are you?       def
4   3      Wie geht es dir?   de

group字段告诉我每种翻译属于哪些文本. 在上面的示例中,组"3"具有默认文本(英语)和德语翻译.

The group field tells me what texts belong together for each translation. In the above example group '3' has a default text (English) and a German translation.

现在,我想选择德语的所有文本,如果不存在,我将为此保留后备英语文本.

Now I want to select all texts for German and if they don't exist, I will want to have the fallback English text for that.

有人知道如何将它们整合到SQL语句中吗?

Anybody an idea how I can put that together into a SQL statement?

推荐答案

SELECT  DISTINCT
        COALESCE(b.ID, a.ID) ID,
        COALESCE(b.`GROUP`, a.`GROUP`) `GROUP`,
        COALESCE(b.`text`, a.`text`) `text`,
        COALESCE(b.language, a.language) language
FROM   TableName a
       LEFT JOIN
        (
            SELECT ID, `GROUP`, `text`, language
            FROM tableName
            WHERE language = 'de'
         ) b ON a.ID <> b.ID AND a.`GROUP` = b.`GROUP`

  • SQLFiddle演示
    • SQLFiddle Demo
    • 这篇关于MySQL通过键选择行或回退以默认键选择的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆