Data Verwantskappe in PHP
Gestel ons het die taak om vaders en seuns te stoor. Gestel elke vader kan slegs een seun hê, en die seun op sy beurt kan ook een seun hê.
Ons moet uitvind hoe ons die data sal stoor.
Die eerste idee wat by jou opkom
is om twee tabelle te maak: parents vir
vaders en sons vir seuns. Dan verbind
hierdie tabelle met 'n veld: son_id
of parent_id.
Hierdie idee is eger nie baie goed nie - want dieselfde persoon kan gelyktydig beide 'n vader en 'n seun wees - en ons sal hom in albei tabelle moet stoor, en dit is ongemaklik, neem meer plek in en lei maklik tot foute.
'N Beter opsie is om die tabel met homself
te verbind: laat ons 'n tabel users maak,
daarin sal ons alle gebruikers stoor en vir elkeen 'n
veld son_id maak, waarin die
id van die seun uit dieselfde tabel gestoor sal word:
| id | name | son_id |
|---|---|---|
| 1 | user1 | 2 |
| 2 | user2 | 3 |
| 3 | user3 | null |
Navrae
Kom ons skryf nou 'n navraag wat die gebruiker saam met sy seun sal uithaal.
Laat ons eers die gebruikers uithaal:
SELECT
*
FROM
users
Laat ons nou hul seuns by die gebruikers voeg. Ons sal die tabel met homself joine, so ons moet dit hernoem:
LEFT JOIN users as sons
Nou kan ons die verbinding tussen die hoof tabel en die hernoemde tabel aandui:
LEFT JOIN users as sons ON sons.id=users.son_id
Laat ons nou die velde aandui:
SELECT
users.name as user_name, sons.name as son_name
Laat ons alles bymekaar sit en die volgende navraag kry:
SELECT
users.name as user_name, sons.name as son_name
FROM
users
LEFT JOIN users as sons ON sons.id=users.son_id
Praktiese Take
Gestel ons het kategorieë. Elke kategorie kan aan 'n ouer kategorie behoort, en daardie een op sy beurt aan sy ouer en so aan. Beskryf die stoor struktuur.
Skryf 'n navraag wat die kategorie saam met sy ouer kategorie uithaal.
Skryf 'n navraag wat die kategorie saam met sy ouer en grootouer uithaal.
Skryf 'n navraag wat die kategorie saam met sy ouer, grootouer en oorgrootouer uithaal.