同じテーブルをjoinする方法 〜ECCUBEを参考例に〜
ECCUBEのカテゴリの表示で、プルダウンメニューをoptiongroupで1階層目のカテゴリに
まとめたいときにやったこと。
なぜこうやったかを詳しく知りたい場合はsmary のhtml_optionsをググってください。
配列をsmarty用にいい感じにしたいからですので。
1階層目だけをdtb_categoryから取得して、そこに2階層目のdtb_categoryをjoinする
同じテーブルのjoinってやったことなかったんで、へーなるほどってことでメモ
まず結果から
SELECT ccat.category_id as category_id, ccat.category_name as category_name, pcat.category_name as parent_category_name FROM (SELECT * FROM dtb_category WHERE level = 1 AND del_flg = 0) pcat INNER JOIN (SELECT * FROM dtb_category WHERE level = 2 AND del_flg = 0) ccat ON pcat.category_id = ccat.parent_category_id ORDER BY ccat.parent_category_id
FROM 句のサブクエリで1階層目(level = 1)だけを取得して、そのテーブルにエイリアス張って
その結果のテーブルに対してjoinする
あ、この場合は、2階層目以下のカテゴリの数だけレコードが欲しいので、
inner joinです。
あとは、それを親カテゴリIDでソートしてあげれば終了。
まぁ、単純っすね
こんなかんじです。