⊗ppPmDOFR 385 of 447 menu

Родственные связи података у PHP-у

Претпоставимо да имамо задатак да чувамо очеве и синове. Претпоставимо да сваки отац може имати само једног сина, а син за узврат такође може имати једног сина.

Потребно је да смислимо како ћемо чувати податке. Прва идеја која може пасти на памет - направити две табеле: parents за очеве и sons за синове. Затим повезати ове табеле неким пољем: son_id или parent_id.

Међутим, то није баш добра идеја - јер иста особа може истовремено бити и отац и син - и мораће да се чува у обе табеле, што је непријатно, заузима више простора и лако доводи до грешака.

Боља варијанта је повезивање табеле саме са собом: направимо табелу users, у њој ћемо чувати све кориснике и сваком направити поље son_id, у коме ће се чувати id сина из исте табеле:

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

Упити

Хајде сада да напишемо упит који ће извући корисника заједно са његовим сином.

За почеткa хајде да просто извучемо кориснике:

SELECT * FROM users

Сада ћемо придружити корисницима њихове синове. Придруживање радимо табеле саме са собом, па нам је потребно извршити њено преименовање:

LEFT JOIN users as sons

Сада можемо навести везу основне табеле и преименоване:

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

Хајде сада да наведемо поља:

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

Саставимо све заједно и добићемо следећи упит:

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

Практични задаци

Претпоставимо да имамо категорије. Свака категорија може припадати родитељској категорији, она за узврат својој родитељској и тако даље. Распишите структуру складиштења.

Напишите упит који ће извући категорију заједно са њеном родитељском категоријом.

Напишите упит који ће извући категорију заједно са њеним родитељем и родитељем родитеља.

Напишите упит који ће извући категорију заједно са њеним родитељем, родитељем родитеља и родитељем родитеља родитеља.

Српски
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Користимо колачиће за рад сајта, аналитику и персонализацију. Обрада података се врши у складу са Политиком приватности.
прихвати све подеси одбиј