⊗ppPmDOFR 385 of 447 menu

Datu radniecības saites PHP

Pieņemsim, ka mums ir uzdevums glabāt tēvus un dēlus. Pieņemsim, ka katram tēvam var būt tikai viens dēls, un dēlam savukārt arī var būt viens dēls.

Jāizdomā, kā glabāsim datus. Pirmā ideja, kas var nākt prātā - izveidot divas tabulas: parents tēviem un sons dēliem. Pēc tam saistīt šīs tabulas ar kādu lauku: son_id vai parent_id.

Tomēr šī ideja nav īpaši laba - jo viens un tas pats cilvēks var vienlaikus būt gan tēvs, gan dēls - un nāksies viņu glabāt abās tabulās, kas ir neērti, aizņem vairāk vietas un viegli noved pie kļūdām.

Labāks variants - saistīt tabulu pašu ar sevi: izveidosim tabulu users, tajā glabāsim visus lietotājus un katram izveidosim lauku son_id, kurā tiks glabāts id dēls no šīs pašas tabulas:

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

Pieprasījumi

Tagad uzrakstīsim pieprasījumu, kas izgūs lietotāju kopā ar viņa dēlu.

Sākumā vienkārši izgūstam lietotājus:

SELECT * FROM users

Tagad pievienosim (LEFT JOIN) lietotājiem viņu dēlus. Savienosim tabulu pašu ar sevi, tāpēc mums vajag veikt tās pārdēvēšanu:

LEFT JOIN users as sons

Tagad mēs varam norādīt saiti starp pamata tabulu un pārdēvēto tabulu:

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

Tagad norādīsim laukus:

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

Saliksim visu kopā un iegūsim šādu pieprasījumu:

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

Praktiskie uzdevumi

Pieņemsim, ka mums ir kategorijas. Katra kategorija var piederēt vecāku kategorijai, tā savukārt savai vecāku kategorijai un tā tālāk. Izklāstiet glabāšanas struktūru.

Uzrakstiet pieprasījumu, kas izgūs kategoriju kopā ar tās vecāku kategoriju.

Uzrakstiet pieprasījumu, kas izgūs kategoriju kopā ar tās vecāku un vectēvu kategoriju.

Uzrakstiet pieprasījumu, kas izgūs kategoriju kopā ar tās vecāku, vectēvu un vecvectēvu kategoriju.

Latviešu
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mēs izmantojam sīkdatnes, lai nodrošinātu vietnes darbību, analīti un personalizāciju. Datu apstrāde notiek saskaņā ar Konfidencialitātes politiku.
pieņemt visus iestatīt noraidīt