⊗ppPmDOFR 385 of 447 menu

Podatkovne povezave sorodstva v PHP

Recimo, da se soočamo z nalogo shranjevanja očetov in sinov. Naj ima vsak oče samo enega sina, sin pa lahko prav tako ima enega sina.

Ugotoviti moramo, kako bomo shranjevali podatke. Prva ideja, ki lahko pride na misel - narediti dve tabeli: parents za očete in sons za sinove. Nato povezati ti tabeli s kakšnim poljem: son_id ali parent_id.

Vendar ta ideja ni zelo dobra - saj lahko ista oseba hkrati je oče in sin - in jo bo treba shraniti v obeh tabelah, kar je neprijetno, zavzame več prostora in zlahka vodi do napak.

Boljša možnost - povezati tabelo samo s seboj: naredimo tabelo users, v njej bomo shranjevali vse uporabnike in vsakemu dodelili polje son_id, kjer bo shranjen id sina iz iste tabele:

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

Poizvedbe

Zdaj napišimo poizvedbo, ki bo pridobila uporabnika skupaj z njegovim sinom.

Za začetek preprosto pridobimo uporabnike:

SELECT * FROM users

Zdaj pridružimo uporabnikom njihove sinove. Pridruževanje bomo naredili tabelo samo sebi, zato moramo izvesti njeno preimenovanje:

LEFT JOIN users as sons

Zdaj lahko določimo povezavo glavne tabele in preimenovane:

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

Določimo zdaj polja:

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

Vse skupaj sestavimo in dobimo naslednjo poizvedbo:

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

Praktične naloge

Recimo, da imamo kategorije. Vsaka kategorija lahko pripada nadrejeni kategoriji, ta pa lahko pripada svoji nadrejeni kategoriji in tako naprej. Opišite strukturo shranjevanja.

Napišite poizvedbo, ki bo pridobila kategorijo skupaj z njeno nadrejeno kategorijo.

Napišite poizvedbo, ki bo pridobila kategorijo skupaj z njenim nadrejenim in starim nadrejenim.

Napišite poizvedbo, ki bo pridobila kategorijo skupaj z njenim nadrejenim, starim nadrejenim in prababico.

Slovenščina
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Za delovanje spletnega mesta, analitiko in personalizacijo uporabljamo piškotke. Obdelava podatkov poteka v skladu s Politiko zasebnosti.
sprejmi vse nastavi zavrni