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:
| 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:
SELECT
*
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:
LEFT 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:
LEFT JOIN users as sons ON sons.id=users.son_id
İndi sahələri göstərək:
SELECT
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:
SELECT
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
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.
Kateqoriyanı onun ana kateqoriyası ilə birlikdə çıxaracaq sorğu yazın.
Kateqoriyanı onun ana kateqoriyası və nənə kateqoriyası ilə birlikdə çıxaracaq sorğu yazın.
Kateqoriyanı onun ana kateqoriyası, nənə kateqoriyası və nənənin ana kateqoriyası ilə birlikdə çıxaracaq sorğu yazın.