PHP-daki maglumatlaryň gatnaşyk baglanylşyklary

Biziň öňümizde ata we ogullary saklamak wezipesi durupdyr diýeliň. Her ata diňe bir ogluňy bolup biler, ogul bolsa öz gezeginde hem bir ogluňy bolup biler.

Maglumatlary nädip saklajakdygymyzy oýlap tapmaly. Aklamyza ilkinji gelýän ideýa - iki sany tablisany döretmek: parents atalar üçin we sons ogullar üçin. Soňra bu tablisalary bir şahyr bilen baglamak: son_id ýa-da parent_id.

Emma, bu ideýa gaty gowy däl - sebäbi şol bir adam hem ata hem ogul bolup bilýär - we ony iki tablisada saklamaly bolar, bu bolsa amatly däl, köpräk ýer tutýar we ýalňyşlyklara aňsat getirýär.

Has gowy wariant - tablisany özi bilen baglamak: biz users tablisasyny dörederis, onda ähli ulanyjylary saklaris we hersine son_id meýdanyny bereris, onda şol bir tablisadaky oglyň id-si saklanar:

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

Soraglar

Indi ulanyjy onuň ogly bilen birlikde aljak sorag ýazalyň.

Başlangyçda diňe ulanyjylary alyň:

sqlSELECT
  *
FROM
  users

Indi ulanyjylara olaryň ogullaryny birleşdireris (JOIN). Birleşdirmek (JOIN) üçin biz tablisany özi bilen etmelis, şonuň üçin biz onyň adyny üýtgetmeli:

sqlLEFT JOIN users as sons

Indi esasy tablisanyň we ady üýtgedilen tablisanyň baglanyşygyny görkezip bileris:

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

Indi meýdanlary görkezeliň:

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

Hemmesini bir ýere ýygnalyň we aşakdaky soragy alarys:

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

Amaly wezîpeler

Задание 1

Bizde kategoriýalar bardyr diýeliň. Her kategoriýa ene-atanyň kategoriýasyna degişli bolup biler, ol öz gezeginde özüniň ene-atasyna we şuňa meňzeş daşary. Saklamak gurluşyny ýazyň.

Задание 2

Kategoriýany onuň ene-ata kategoriýasy bilen birlikde alyjak sorag ýazyň.

Задание 3

Kategoriýany onuň ene-atasy we baba-atasy bilen birlikde alyjak sorag ýazyň.

Задание 4

Kategoriýany onuň ene-atasy, baba-atasy we baba-baba-atasy bilen birlikde alyjak sorag ýazyň.