実現したいこと
idを元にSELECTしたレコードと、
そのレコードの parent_idを持つレコード
の2行を 1回のクエリで同時にSELECT する事は可能でしょうか。
(googleで何と検索すれば いいでしょうか。)
例:
下記のテーブルにて、id=3 を元にしたとすると、
まず、くだもの レコードがSELECTされます。
くだもの レコードの parent_id は 1 なので、
id = 1 である、食べ物 レコード をSELECTします。
この時、くだもの レコードと、食べ物レコード の 2行を1回のクエリで取得したいです。
| id | parent_id | data |
|---|---|---|
| 1 | null | 食べ物 |
| 2 | null | 乗り物 |
| 3 | 1 | くだもの |
| 4 | 1 | お菓子 |
▽取得したい配列の形
[ [ 'id'=>3 'parent_id'=>1, 'data'=>'くだもの' ], [ 'id'=>1 'parent_id'=>null, 'data'=>'食べ物' ], ]
試したこと
下記のコードでは、とある子供レコードの親レコードの取得はできますが、子供レコードが取得できなくて困っています。
sql
1SELECT t2.* 2FROM `main` t1 3JOIN `main` t2 ON t1.id = t2.parent_id 4WHERE t1.id = 3;
まとめ(メモ)
教えて頂いた方法を使って、下記のようにして、親、子供、孫 の3レコード取得が出来ました。
※実際のテーブルには最大5階層あるため、下記のようなsqlを階層の分、PHPで生成する形になりそうです。
sql
1select * 2 from main 3 where id = 31 4 or id = (select parent_id 5 from main 6 where id = (select parent_id 7 from main 8 where id = 31)) 9 or id = (select parent_id 10 from main 11 where id = 31)
回答2件
あなたの回答
tips
プレビュー