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:
| 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ň:
SELECT
*
FROM
users
Indi ulanyjylara olaryň ogullaryny birleşdireris (JOIN). Birleşdirmek (JOIN) üçin biz tablisany özi bilen etmelis, şonuň üçin biz onyň adyny üýtgetmeli:
LEFT JOIN users as sons
Indi esasy tablisanyň we ady üýtgedilen tablisanyň baglanyşygyny görkezip bileris:
LEFT JOIN users as sons ON sons.id=users.son_id
Indi meýdanlary görkezeliň:
SELECT
users.name as user_name, sons.name as son_name
Hemmesini bir ýere ýygnalyň we aşakdaky soragy alarys:
SELECT
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
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ň.
Kategoriýany onuň ene-ata kategoriýasy bilen birlikde alyjak sorag ýazyň.
Kategoriýany onuň ene-atasy we baba-atasy bilen birlikde alyjak sorag ýazyň.
Kategoriýany onuň ene-atasy, baba-atasy we baba-baba-atasy bilen birlikde alyjak sorag ýazyň.