⊗ppPmDOFR 385 of 447 menu

Datas släktskapsrelationer i PHP

Antag att vi står inför uppgiften att lagra fäder och söner. Låt varje far bara ha en son, och sonen i sin tur kan också ha en son.

Vi måste komma på hur vi ska lagra data. Den första idén som kan komma att tänka på - skapa två tabeller: parents för fäder och sons för söner. Sedan koppla dessa tabeller med något fält: son_id eller parent_id.

Men det här är inte en särskilt bra idé - för samma person kan samtidigt vara både far och son - och då måste man lagra honom i båda tabellerna, vilket är obekvämt, tar upp mer plats och lätt leder till fel.

Ett bättre alternativ är att koppla tabellen till sig själv: vi skapar en tabell users, i den lagrar vi alla användare och ger varje användare fältet son_id, där id för sonen från samma tabell kommer att lagras:

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

Frågor

Låt oss nu skriva en fråga som hämtar användaren tillsammans med hans son.

Låt oss först bara hämta användarna:

SELECT * FROM users

Nu joinar vi användarna med deras söner. Vi kommer att joina tabellen med sig själv, så vi behöver byta namn på den:

LEFT JOIN users as sons

Nu kan vi ange kopplingen mellan huvudtabellen och den omdöpta tabellen:

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

Låt oss nu ange fälten:

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

Låt oss sätta ihop allt och få följande fråga:

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

Praktiska uppgifter

Antag att vi har kategorier. Varje kategori kan tillhöra en överordnad kategori, den i sin tur sin överordnade kategori och så vidare. Beskriv lagringsstrukturen.

Skriv en fråga som hämtar en kategori tillsammans med dess överordnade kategori.

Skriv en fråga som hämtar en kategori tillsammans med dess förälder och farförälder (förförälder).

Skriv en fråga som hämtar en kategori tillsammans med dess förälder, farförälder och farfarförälder.

Svenska
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi använder kakor för webbplatsens funktion, analys och personalisering. Behandling av data sker i enlighet med Integritetspolicyn.
acceptera alla anpassa avvisa