Mysql 在获取多语言数据时实现回退
我正在根据答案翻译现有的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
- 菜单项
- 身份证
- 排序位置
- 菜单项翻译
- 菜单项标识
- 语言枚举('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';
这正是我想要的