⊗ppPmDOFR 385 of 447 menu

Příbuzenské vztahy dat v PHP

Předpokládejme, že stojíme před úkolem ukládat otce a syny. Předpokládejme, že každý otec může mít pouze jednoho syna a syn naopak také může mít jednoho syna.

Je třeba vymyslet, jak budeme data ukládat. První nápad, který může přijít na mysl, - vytvořit dvě tabulky: parents pro otce a sons pro syny. Poté propojit tyto tabulky nějakým polem: son_id nebo parent_id.

To však není moc dobrý nápad - vždyť stejná osoba může být současně jak otcem, tak synem - a bude ji třeba ukládat v obou tabulkách, což je nepohodlné, zabírá to víc místa a snadno vede k chybám.

Lepší varianta - propojit tabulku samu se sebou: vytvoříme tabulku users, budeme v ní ukládat všechny uživatele a každému vytvoříme pole son_id, ve kterém se bude ukládat id syna ze stejné tabulky:

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

Dotazy

Nyní napišme dotaz, který načte uživatele spolu s jeho synem.

Pro začátek načtěme uživatele:

SELECT * FROM users

Nyní připojme k uživatelům jejich syny. Připojovat budeme tabulku samu k sobě, proto je třeba provést její přejmenování:

LEFT JOIN users as sons

Nyní můžeme určit vazbu mezi hlavní tabulkou a přejmenovanou tabulkou:

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

Nyní určeme pole:

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

Vše spojme dohromady a získáme následující dotaz:

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

Praktické úlohy

Předpokládejme, že máme kategorie. Každá kategorie může patřit nadřazené kategorii, ta zase své nadřazené kategorii a tak dále. Rozepište strukturu ukládání.

Napište dotaz, který načte kategorii spolu s její nadřazenou kategorií.

Napište dotaz, který načte kategorii spolu s jejím rodičem a prarodičem.

Napište dotaz, který načte kategorii spolu s jejím rodičem, prarodičem a praprarodičem.

Čeština
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяDanskDeutschΕλληνικά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
Používáme soubory cookie pro fungování webu, analýzu a personalizaci. Zpracování údajů probíhá v souladu s Zásadami ochrany osobních údajů.
přijmout vše přizpůsobit odmítnout