⊗ppPmDOFR 385 of 447 menu

PHPにおけるデータの親子関係

例えば、父親と息子の情報を保存する必要があるとしましょう。各父親は一人の息子しか持てず、 息子もまた一人の息子を持てるとします。

データの保存方法を考える必要があります。最初に思いつくアイデアは、 父親用の parents テーブルと息子用の sons テーブルの2つを作り、 これらを son_idparent_id といったフィールドで関連付けることです。

しかし、この考え方はあまり良くありません。なぜなら、同じ人が父親であり息子でもある場合、 両方のテーブルに保存する必要があり、不便でスペースを無駄にし、エラーを引き起こしやすいからです。

より良い方法は、テーブルを自己結合することです。 users テーブルを作成し、 全てのユーザーを保存し、各ユーザーに son_id フィールドを設けて、 同じテーブル内の息子の id を保存します。

users
id name son_id
1 user1 2
2 user2 3
3 user3 null

クエリ

では、ユーザーとその息子を一緒に取得するクエリを書いてみましょう。

まず、単純にユーザーを取得します。

SELECT * FROM users

次に、ユーザーにその息子を結合(JOIN)します。 テーブルを自己結合するため、エイリアス(別名)を付ける必要があります。

LEFT JOIN users as sons

これで、メインテーブルとエイリアスを付けたテーブル間の関係を指定できます。

LEFT JOIN users as sons ON sons.id=users.son_id

次に、フィールドを指定します。

SELECT users.name as user_name, sons.name as son_name

全てをまとめると、次のようなクエリになります。

SELECT users.name as user_name, sons.name as son_name FROM users LEFT JOIN users as sons ON sons.id=users.son_id

実践的な課題

カテゴリがあるとします。各カテゴリは親カテゴリに属することができ、 その親カテゴリもまた自身の親カテゴリに属することができ、以降同様です。 保存構造を設計してください。

カテゴリとその親カテゴリを一緒に取得するクエリを書いてください。

カテゴリとその親、さらにその親(祖カテゴリ)を一緒に取得するクエリを書いてください。

カテゴリとその親、祖カテゴリ、さらにその親(曾祖カテゴリ)を一緒に取得するクエリを書いてください。

日本語
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItalianoქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
当サイトでは、サイトの動作、分析、パーソナライゼーションのためにクッキーを使用しています。 データ処理はプライバシーポリシーに従って行われます。
すべて受け入れる 設定 拒否