Əlaqəli cədvəllərdən məlumatların alınması PHP-də
Gəlin istifadəçiləri şəhərləri ilə birlikdə çıxaran
sorğu yazaq. Bunun üçün bizə LEFT
JOIN əmri lazımdır:
Onun sintaksisi aşağıdakı kimi olur:
SELECT sahələr FROM cədvəl_adı
LEFT JOIN əlaqəli_cədvəl_adı ON əlaqə_şərti
WHERE seçim_şərti
Gəlin bu əmrın sintaksisinin ayrı-ayrı hissələrini izah edək.
Sahələr
Bir neçə cədvəldən seçim edildiyi üçün,
* vasitəsilə bütün sahələrin seçimi
işləməyəcək. Aşağıdakı sorğu yalnız əsas
cədvəldən sahələri seçəcək, əlaqəli cədvəldən deyil:
SELECT *
Bütün cədvəllərdən məlumatların seçilməsi üçün,
* qarşısında seçim üçün cədvəl adını
göstərmək lazımdır:
SELECT users.*, cities.*
Ya da bizə lazım olan sahələri onların qarşısında cədvəl adını göstərməklə sadalamaq olar:
SELECT users.name, cities.name
Bu iki üsulun problemi var. O ondan ibarətdir ki, əgər cədvəllərdəki sahələr eyni adlara malikdirsə, onda PHP massivində adlar toqquşması baş verəcək və yalnız bir sahə qalacaq, ikincisi olmayacaq.
Problemin həlli üçün toqquşan adları as
əmri ilə dəyişdirmək lazımdır:
SELECT users.name, cities.name as city_name
Əlaqə
ON əmrından sonra biz
əlaqənin qurulduğu iki cədvəldən olan
sahələri göstərməliyik. Bizim vəziyyətimizdə bu,
şəhərlər cədvəlindən id sahəsi
və istifadəçilər cədvəlindən city_id
sahəsi olacaq:
ON cities.id=users.city_id
Sorğu
Nəticədə, istifadəçiləri şəhərləri ilə birlikdə çıxaran sorğu aşağıdakı kimi olacaq:
SELECT
users.name, cities.name as city_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
Praktiki tapşırıqlar
Tutaq ki, sizin məhsullar cədvəli və onların kateqoriyaları cədvəli var. Məhsulların adlarını kateqoriyaları ilə birlikdə çıxaran sorğu yazın.