2012-12-14 62 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