PHP-də Məlumatların Qohumluq Əlaqələri

Tutaq ki, qarşımızda ataları və oğulları saxlamaq vəzifəsi durur. Tutaq ki, hər bir atanın yalnız bir oğlu ola bilər, oğul da öz növbəsində bir oğula sahib ola bilər.

Məlumatları necə saxlayacağımızı düşünməliyik. Ağlına gələ biləcək ilk fikir - iki cədvəl yaratmaqdır: atalar üçün parents və oğullar üçün sons. Sonra bu cədvəlləri bir növ sahə ilə əlaqələndirmək: son_id və ya parent_id.

Lakin, bu fikir çox yaxşı deyil - axı eyni şəxs eyni zamanda həm ata, həm də oğul ola bilər - və onu hər iki cədvəldə saxlamaq məcburiyyətində qalacağıq, bu da əlverişsizdir, daha çox yer tutur və asanlıqla səhvlərə səbəb ola bilər.

Daha yaxşı variant - cədvəli özü ilə əlaqələndirməkdir: gəlin users cədvəli yaradaq, orada bütün istifadəçiləri saxlayacağıq və hər birinə son_id sahəsi təyin edəcəyik, bu sahədə eyni cədvəldən olan oğulun id-si saxlanılacaq:

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

Sorğular

İndi gəlin istifadəçini onun oğlu ilə birlikdə çıxaracaq sorğu yazaq.

Əvvəlcə gəlin sadəcə istifadəçiləri çıxaraq:

sqlSELECT
  *
FROM
  users

İndi istifadəçilərə onların oğullarını birləşdirək (join edək). Biz cədvəli özü ilə birləşdirəcəyik, ona görə də onu yenidən adlandırmağı yerinə yetirməliyik:

sqlLEFT JOIN users as sons

İndi əsas cədvəl və yenidən adlandırılmış cədvəl arasında əlaqəni göstərə bilərik:

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

İndi sahələri göstərək:

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

Gəlin hamısını birləşdirək və aşağıdakı sorğunu əldə edək:

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

Praktiki Tapşırıqlar

Задание 1

Tutaq ki, kateqoriyalarımız var. Hər bir kateqoriya ana kateqoriyaya aid ola bilər, o da öz növbəsində öz ana kateqoriyasına aid ola bilər və s. Saxlama quruluşunu təsvir edin.

Задание 2

Kateqoriyanı onun ana kateqoriyası ilə birlikdə çıxaracaq sorğu yazın.

Задание 3

Kateqoriyanı onun ana kateqoriyası və nənə kateqoriyası ilə birlikdə çıxaracaq sorğu yazın.

Задание 4

Kateqoriyanı onun ana kateqoriyası, nənə kateqoriyası və nənənin ana kateqoriyası ilə birlikdə çıxaracaq sorğu yazın.