Baglanlyan tablisalaryň zynjyry
Indi ulanyjylaryň belli bir şäherlerde ýaşaýandygyny, bu şäherleriň bolsa dürli ýurtlarda ýerleşýändigini göz öňüne getireli. Bu ýagdaýda saklamak üçin bize üç tablisa gerek bolar: ulanyjylar şäherler bilen, şäherler bolsa ýurtlar bilen baglanar. Şeýlelikde, ulanyjylary ýurtlar bilen baglamak üçin aýratyn meýdan gerek bolmaz - şäherleriň ýurtlar bilen baglanyşygy arkaly ulanyjylar ýurtlar bilen baglanar.
Tablisalarymyza göz aýlalyň. Ýurtlar tablisasy:
| id | name |
|---|---|
| 1 | country1 |
| 2 | country2 |
Şäherler tablisasy:
| id | name | country_id |
|---|---|---|
| 1 | city1 | 1 |
| 2 | city2 | 1 |
| 3 | city3 | 2 |
Ulanyjylar tablisasy üýtgemeýär:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Soraglary
Ulanyjylary şäherleri we ýurtlary bilen alyp gelmek üçin bize iki JOIN amaly etmeli bolar: birinjisi şäherleri ulanyjylara, ikinjisi bolsa ýurtlary şäherlere birleşdirer:
SELECT
users.name,
cities.name as city_name,
countries.name as country_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
LEFT JOIN countries ON countries.id=cities.country_id
Amaly wezipeler
Harytlaryň belli bir kategoriýanyň içindäki kiçi kategoriýalara degişlidigini, kiçi kategoriýalaryň bolsa belli bir esasy kategoriýa degişlidigini göz öňüne getiriň. Saklamanyň gurluşyny düşündiriň.
Harytlary, olaryň kiçi kategoriýalary we esasy kategoriýalary bilen bir wagtda alyp gelýän sorag ýazyň.
Kiçi kategoriýalary, olaryň esasy kategoriýalary bilen bir wagtda alyp gelýän sorag ýazyň.