Mysql 在获取多语言数据时实现回退

Mysql 在获取多语言数据时实现回退,mysql,database-design,localization,multilingual,Mysql,Database Design,Localization,Multilingual,我正在根据答案翻译现有的MySQL表。在本例中,我处理的是菜单项,我的表结构如下所示: 菜单项 身份证 排序位置 菜单项翻译 菜单项标识 语言枚举('nl','en') 标签 工具提示 我现在正在寻找一种连接这些表的方法,在搜索另一种语言的记录时,我可以使用一种语言作为后备语言 标准查询如下所示: SELECT * FROM menu_items mi INNER JOIN menu_item_translations mit ON mit.menu_ite

我正在根据答案翻译现有的MySQL表。在本例中,我处理的是菜单项,我的表结构如下所示:

  • 菜单项
    • 身份证
    • 排序位置
  • 菜单项翻译
    • 菜单项标识
    • 语言枚举('nl','en')
    • 标签
    • 工具提示
我现在正在寻找一种连接这些表的方法,在搜索另一种语言的记录时,我可以使用一种语言作为后备语言

标准查询如下所示:

SELECT 
    *
FROM
    menu_items mi
INNER JOIN menu_item_translations mit
    ON mit.menu_item_id = mi.id
WHERE
    mit.language = 'en';
但我希望“nl”是在找不到英文菜单项的情况下的备用选项。我对存储过程不太感兴趣,但如果有必要,我可以使用它们


有没有什么方法可以在这个查询中实现回退,而不会造成太多的性能损失或问题?

在发布这个问题后立即意识到答案相当简单

SELECT 
    mi.*,
    COALESCE(mit.label, mit_fb.label) AS label
FROM
    menu_items mi
LEFT JOIN menu_item_translations mit
    ON mit.menu_item_id = mi.id
    AND mit.language = 'en'
LEFT JOIN menu_item_translations mit_fb
    ON mit_fb.menu_item_id = mi.id
    AND mit_fb.language = 'nl';

这正是我想要的。

在发布这个问题后意识到答案相当简单

SELECT 
    mi.*,
    COALESCE(mit.label, mit_fb.label) AS label
FROM
    menu_items mi
LEFT JOIN menu_item_translations mit
    ON mit.menu_item_id = mi.id
    AND mit.language = 'en'
LEFT JOIN menu_item_translations mit_fb
    ON mit_fb.menu_item_id = mi.id
    AND mit_fb.language = 'nl';
这正是我想要的