⊗ppPmDOFR 385 of 447 menu

Data Relations i PHP

Lad os antage, at vi står overfor opgaven med at gemme fædre og sønner. Lad hver far kun have én søn, og sønnen kan til gengæld også have én søn.

Vi skal finde på, hvordan vi vil gemme dataene. Den første idé, der måske dukker op, er at oprette to tabeller: parents til fædre og sons til sønner. Derefter forbinde disse tabeller med et eller andet felt: son_id eller parent_id.

Dette er dog ikke en særlig god idé - for samme person kan samtidig være både far og søn - og vi bliver nødt til at gemme ham i begge tabeller, hvilket er upraktisk, optager mere plads og leder let til fejl.

En bedre mulighed er at forbinde tabellen med sig selv: lad os oprette en tabel users, hvor vi gemmer alle brugere, og give hver en et felt son_id, hvor vi gemmer id på sønnen fra den samme tabel:

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

Forespørgsler

Lad os nu skrive en forespørgsel, der henter brugeren sammen med hans søn.

Lad os først bare hente brugerne:

SELECT * FROM users

Lad os nu join'e sønnerne til brugerne. Da vi joiner tabellen med sig selv, er vi nødt til at omdøbe den:

LEFT JOIN users as sons

Nu kan vi angive relationen mellem hovedtabellen og den omdøbte tabel:

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

Lad os nu angive felterne:

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

Lad os samle alt og få følgende forespørgsel:

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

Praktiske opgaver

Antag, at vi har kategorier. Hver kategori kan tilhøre en overordnet kategori, som til gengæld kan tilhøre sin egen overordnede kategori, og så videre. Beskriv lagringsstrukturen.

Skriv en forespørgsel, der henter en kategori sammen med dens overordnede kategori.

Skriv en forespørgsel, der henter en kategori sammen med dens forælder og bedsteforælder.

Skriv en forespørgsel, der henter en kategori sammen med dens forælder, bedsteforælder og oldeforælder.

Dansk
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDeutschΕλληνικά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
Vi bruger cookies til webstedets funktion, analyse og personalisering. Behandling af data foregår i henhold til Fortrolighedspolitikken.
accepter alle tilpas afvis