⊗ppPmDOFR 385 of 447 menu

Relații de înrudire a datelor în PHP

Să presupunem că avem sarcina de a stoca tați și fii. Să presupunem că fiecare tată poate avea doar un singur fiu, iar fiul la rândul său poate avea și el un singur fiu.

Trebuie să ne gândim cum vom stoca datele. Prima idee care ne poate veni în minte - să facem două tabele: parents pentru tați și sons pentru fii. Apoi să legăm aceste tabele printr-un câmp oarecare: son_id sau parent_id.

Cu toate acestea, aceasta nu este o idee foarte bună - pentru că aceeași persoană poate fi simultan și tată și fiu - și va trebui să o stocăm în ambele tabele, ceea ce este incomod, ocupă mai mult spațiu și duce ușor la erori.

O variantă mai bună - este să legăm tabelul cu el însuși: vom face un tabel users, în el vom stoca toți utilizatorii și fiecăruia îi vom face un câmp son_id, în care va fi stocat id-ul fiului din același tabel:

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

Interogări

Acum să scriem o interogare care va extrage utilizatorul împreună cu fiul său.

Pentru început, să extragem utilizatorii:

SELECT * FROM users

Acum să facem JOIN utilizatorilor cu fiii lor. Vom face JOIN tabelului cu el însuși, deci avem nevoie să-i facem redenumirea:

LEFT JOIN users as sons

Acum putem specifica legătura dintre tabelul principal și tabelul redenumit:

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

Acum să specificăm câmpurile:

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

Să punem totul laolaltă și vom obține următoarea interogare:

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

Sarcini practice

Să presupunem că avem categorii. Fiecare categorie poate aparține unei categorii părinte, aceasta la rândul ei propriului său părinte și așa mai departe. Descrieți structura de stocare.

Scrieți o interogare care va extrage categoria împreună cu categoria sa părinte.

Scrieți o interogare care va extrage categoria împreună cu părintele și bunicul său.

Scrieți o interogare care va extrage categoria împreună cu părintele, bunicul și străbunicul său.

Română
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Folosim cookie pentru funcționarea site-ului, analiză și personalizare. Prelucrarea datelor are loc în conformitate cu Politica de confidențialitate.
acceptă toate configurează respinge