0

你们好吗?

对不起我的英语。

我有两张桌子

菜单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`
4

2 回答 2

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}
于 2013-03-12T20:15:45.310 回答
0

要实现这一点,您需要使用 id 和语言加入menus两次menus_localization。如果它不为空,则先使用COALESCE()orIFNULL()接受阿拉伯语,否则回退到英语。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 示例

于 2013-03-12T20:17:52.067 回答