Ə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:

sqlSELECT 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:

sqlSELECT *

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:

sqlSELECT 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:

sqlSELECT 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:

sqlSELECT 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:

sqlON 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:

sqlSELECT 
  users.name, cities.name as city_name
FROM 
  users
LEFT JOIN cities ON cities.id=users.city_id

Praktiki tapşırıqlar

Задание 1

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.