⊗ppPmDOFR 385 of 447 menu

Srodničke veze podataka u PHP

Pretpostavimo da smo suočeni sa zadatkom čuvanja očeva i sinova. Neka svaki otac može imati samo jednog sina, a sin zauzvrat takođe može imati jednog sina.

Potrebno je smisliti kako ćemo čuvati podatke. Prva ideja koja može pasti na pamet je napraviti dve tabele: parents za očeve i sons za sinove. Zatim povezati ove tabele nekim poljem: son_id ili parent_id.

Međutim, ova ideja nije baš dobra - jer ista osoba može istovremeno biti i otac i sin - i moralo bi se da čuva u obe tabele, a to je nepraktično, zauzima više mesta i lako vodi greškama.

Bolja varijanta je povezivanje tabele same sa sobom: napravićemo tabelu users, u joj ćemo čuvati sve korisnike i svakom ćemo napraviti polje son_id, u kojem će se čuvati id sina iz ove iste tabele:

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

Upiti

Sada napišimo upit koji će izvući korisnika zajedno sa njegovim sinom.

Za početak, hajde da jednostavno izvučemo korisnike:

SELECT * FROM users

Sada ćemo pridružiti korisnicima njihove sinove. Pridruživanje ćemo vršiti tabele same sa sobom, pa nam treba izvršiti njeno preimenovanje:

LEFT JOIN users as sons

Sada možemo navesti vezu osnovne tabele i preimenovane:

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

Hajde da sada navedemo polja:

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

Sastavimo sve zajedno i dobićemo sledeći upit:

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čni zadaci

Neka imamo kategorije. Svaka kategorija može pripadati roditeljskoj kategoriji, ona zauzvrat svojoj roditeljskoj i tako dalje. Opišite strukturu čuvanja.

Napišite upit koji će izvući kategoriju zajedno sa njenom roditeljskom kategorijom.

Napišite upit koji će izvući kategoriju zajedno sa njenim roditeljem i roditeljem roditelja.

Napišite upit koji će izvući kategoriju zajedno sa njenim roditeljem, roditeljem roditelja i roditeljem roditelja roditelja.

Srpski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Koristimo kolačiće za rad sajta, analitiku i personalizaciju. Obrada podataka se vrši u skladu sa Politikom privatnosti.
prihvati sve podesi odbij