2012-12-14 26 views
0

我有三个表:menu,menu_data,languages。第一个用于存储不需要本地化的菜单信息,第二个包含基于语言的本地化数据(如标题),最后一个包含语言ID。菜单可以由父母拥有,我想在选择子菜单时提取此父母。 我可以使用嵌套LEFT JOIN查询这样做:MySQL加入使用多个表的父记录

SELECT la.title, la.permaname, menu.edittime, menu.id, la2.title AS parent_title, pmenu.id AS parent_id 
FROM fm_menu AS menu 
LEFT JOIN fm_menu_data AS la ON (menu.id = la.targetid and la.languageid = 1) 
LEFT JOIN fm_menu AS pmenu ON pmenu.id = menu.parentmenu 
LEFT JOIN fm_menu_data AS la2 ON (pmenu.id = la2.targetid and la2.languageid = 1) 

不过,我的问题是,有没有更紧凑,更快速的或正确的方式做这样的事情?

+0

看上去只有我的权利。 – Barmar

+0

是的,它是正确的,并且工作正常,但是我问是否有更合适或更紧凑的方式来执行相同的查询 – Lwyrn

+0

这就是我的意思,它看起来尽可能简单。 – Barmar

回答

1

您的查询看起来不错。

您可以通过从加入条件中删除不必要的括号并删除可选的AS关键字,使其稍微变得更加简洁

这是相同的,但在更少的字符表示:

SELECT la.title, la.permaname, menu.edittime, menu.id, la2.title AS parent_title, pmenu.id AS parent_id 
FROM fm_menu AS menu 
LEFT JOIN fm_menu_data la ON menu.id = la.targetid and la.languageid = 1 
LEFT JOIN fm_menu pmenu ON pmenu.id = menu.parentmenu 
LEFT JOIN fm_menu_data la2 ON pmenu.id = la2.targetid and la2.languageid = 1