获取阿拉伯语数据,或者如果不存在则获得英语

时间:2013-03-12 19:58:21

标签: php mysql sql localization

你们好吗?

对不起我的英语。

我有两张桌子

菜单 menus_localization

菜单表

| id_menu | section_menu | active_menu |
|    1    |    footer    |     yes     |
|    2    |    footer    |     yes     |

本地化表

| id_localization | id_menu |   name_menu   | link_menu                   | language_menu |
|       1         |    1    |      Home     |  http://example.com         |    english    |
|       2         |    1    |الصفحة الرئيسية|  http://example.com         |     arabic    |
|       3         |    2    |     signup    |  http://example.com/signup  |     english   |

现在,我希望获得阿拉伯语的菜单,如果不存在,请用英语获取。

喜欢这个:

الصفحة الرئيسية
Signup

这是我的疑问:

SELECT *
FROM (`menus_localization` ML)
JOIN `menus` MS ON `MS`.`id_menu` = `ML`.`id_menu`
WHERE `MS`.`section_menu` =  'footer'
AND `ML`.`language_menu` =  'Arabic'
OR `ML`.`language_menu` =  'English'
GROUP BY `ML`.`id_menu`

2 个答案:

答案 0 :(得分:0)

我假设你使用的是你添加的标签中的php。如果是这样,请执行检索页面信息的查询。 像这样的东西:

SELECT * FROM your_table  WHERE id_menu ='1'

使用此查询,您将获得两个结果:

|       1         |    1    |      Home     |  http://example.com         |    english    |
|       2         |    1    |الصفحة الرئيسية|  http://example.com         |     arabic    |

您可以使用if语句来确定要显示的语言

if($arabic) { // display arabic } else { // display english}

答案 1 :(得分:0)

要实现这一点,您需要使用ID和语言两次加入menusmenus_localization。然后使用COALESCE()IFNULL()先在阿拉伯语中取menu_name,如果它不为空,否则以英语为后盾。

SELECT m.id_menu, 
       m.section_menu, 
       m.active_menu,
       COALESCE(l2.name_menu, l1.name_menu) name_menu,
       COALESCE(l2.link_menu, l1.link_menu) link_menu
FROM menus m LEFT JOIN 
     menus_localization l1 ON m.id_menu = l1.id_menu AND 
                              l1.`language_menu` =  'english' LEFT JOIN
     menus_localization l2 ON m.id_menu = l2.id_menu AND 
                              l2.`language_menu` =  'arabic'

<强> SQLFiddle example