0

menu、menu_data、languages の 3 つのテーブルがあります。最初のものはローカライズする必要のないメニュー情報を格納するために使用され、2 つ目は言語に基づいてローカライズされたデータ ( title など) を含み、最後のものは言語 ID を含みます。メニューは親が所有することができ、子メニューを選択するときにこの親を抽出したいと考えています。次のようなネストされた LEFT JOIN クエリを使用して実行できます。

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 )

しかし、私の質問は、このようなことを行うためのよりコンパクトで高速または正しい方法はありますか?

4

1 に答える 1

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
于 2012-12-14T19:07:56.387 に答える