Python-da birikdirilen tablisalaryň zynjyry
Indi ulanyjylaryň belli bir şäherlerde ýaşaýandygyny we bu şäherleriň dürli ýurtlarda ýerleşýändigini göz öňüne getireýälim. Şeýle ýagdaýda saklamak üçin bize üç tablisa zerur bolar: ulanyjylar şäherler bilen, şäherler bolsa ýurtlar bilen birikdiriler. Şol bir wagtyň özünde biz ulanyjylaryň ýurtlar bilen birikdirilmegi üçin bir meýdançaga zerur bolmaz – sebäbi ulanyjylar şäherleriň we ýurtlaryň birikdirilmegi arkaly ýurtlar bilen baglanyşykly bolar.
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 özgeriksiz galar:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Soraglar
Ulanyjylary olaryň şäherleri we ýurtlary bilen alyp gelmek üçin, bize iki join etmek zerur bolar: birinji ulanyjylara şäherleri, ikinji bolsa şäherlere ýurtlary goşar:
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 meseleler
Harytlaryň belli bir kiçi kategoriýa degişlidigi we kiçi kategoriýalaryň bolsa belli bir kategoriýa degişlidigi bolsun. Saklamak gurluşyny ýazyň.
Harytlary, olaryň kiçi kategoriýalary we kategoriýalary bilen alyp gelýän soragy ýazyň.
Kiçi kategoriýalary olaryň kategoriýalary bilen alyp gelýän soragy ýazyň.