Marrëdhëniet e të dhënave të lidhura në PHP
Supozoni se kemi përballë detyrën e ruajtjes së baballarëve dhe djemve. Le të supozojmë se çdo baballar mund të ketë vetëm një djalë, dhe djali nga ana e tij gjithashtu mund të ketë një djalë.
Duhet të gjejmë se si do t'i ruajmë të dhënat.
Ideja e parë që mund t'ju vijë në mendje
është të bëhen dy tabela: parents për
baballarët dhe sons për djemtë. Pastaj të lidhim
këto tabela me ndonjë fushë: son_id
ose parent_id.
Megjithatë, kjo nuk është një ide shumë e mirë - në fund të fundit i njëjti person mund të jetë njëkohësisht si baballar ashtu edhe djalë - dhe do të duhej ta ruajmë atë në të dy tabelat, gjë që është e papërshtatshme, zë më shumë hapësirë dhe lehtësisht çon në gabime.
Një variant më i mirë është të lidhim tabelën
vete me vete: le të krijojmë një tabelë users, në
të do të ruajmë të gjithë përdoruesit dhe secilit do t'i krijojmë
një fushë son_id, në të cilën do të ruhet
id i djalit nga e njëjta tabelë:
| id | name | son_id |
|---|---|---|
| 1 | user1 | 2 |
| 2 | user2 | 3 |
| 3 | user3 | null |
Kërkesat
Tani le të shkruajmë një kërkesë që do të nxjerrë përdoruesin së bashku me djalën e tij.
Për fillim, le të nxjerrim thjesht përdoruesit:
SELECT
*
FROM
users
Tani le t'i bashkojmë (join) përdoruesve djemtë e tyre. Do ta bashkojmë tabelën vetë me vete, prandaj na duhet të kryejmë riemërtimin e saj:
LEFT JOIN users as sons
Tani mund të specifikojmë lidhjen e tabelës kryesore dhe asaj të riemërtuar:
LEFT JOIN users as sons ON sons.id=users.son_id
Tani le të specifikojmë fushat:
SELECT
users.name as user_name, sons.name as son_name
Le të mbledhim gjithçka së bashku dhe do të marrim kërkesën e mëposhtme:
SELECT
users.name as user_name, sons.name as son_name
FROM
users
LEFT JOIN users as sons ON sons.id=users.son_id
Detyra praktike
Supozoni se kemi kategori. Çdo kategori mund t'i përkasë një kategorie prindërore, e cila nga ana e saj mund t'i përkasë kategorisë së saj prindërore e kështu me radhë. Përshkruani strukturën e ruajtjes.
Shkruani një kërkesë që do të nxjerrë kategorinë së bashku me kategorinë e saj prindërore.
Shkruani një kërkesë që do të nxjerrë kategorinë së bashku me prindin dhe gjyshin e saj.
Shkruani një kërkesë që do të nxjerrë kategorinë së bashku me prindin, gjyshin dhe stërgjyshin e saj.