İlişkili tablolardan veri almak için PHP

Tüm kullanıcıları şehirleriyle birlikte alan bir sorgu yapalım. Bunun için LEFT JOIN komutuna ihtiyacımız olacak:

Sözdizimi aşağıdaki gibidir:

sqlSELECT alanlar FROM tablo_adi
  LEFT JOIN ilişkili_tablo_adi ON bağlantı_koşulu 
WHERE seçim_koşulu

Bu komutun sözdiziminin ayrı kısımlarını inceleyelim.

Alanlar

Seçim birden fazla tablodan yapıldığı için, * ile tüm alanların seçilmesi çalışmayacaktır. Aşağıdaki sorgu sadece ana tablodan alanları seçer, ilişkili tablodan seçmez:

sqlSELECT *

Verilerin tüm tablolardan seçilmesi için, * önünde seçimin yapılacağı tablonun adı belirtilmelidir:

sqlSELECT users.*, cities.*

Ya da ihtiyacımız olan alanları, önlerinde tablo adı belirterek listeleyebiliriz:

sqlSELECT users.name, cities.name

Bu iki yöntemin bir sorunu vardır. Tablo alanları aynı isme sahipse, PHP dizisinde isim çakışması olacak ve sadece bir alan kalacak, diğeri olmayacaktır.

Sorunu çözmek için, çakışan isimler as komutuyla yeniden adlandırılmalıdır:

sqlSELECT users.name, cities.name as city_name

Bağlantı

ON komutundan sonra, bağlantının kurulduğu iki tablodaki alanları belirtmeliyiz. Bizim durumumuzda bu, şehirler tablosundaki id alanı ve kullanıcılar tablosundaki city_id alanı olacaktır:

sqlON cities.id=users.city_id

Sorgu

Sonuçta, kullanıcıları şehirleriyle birlikte alacak sorgu aşağıdaki gibi olacaktır:

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

Pratik Görevler

Задание 1

Elinizde ürünler tablosu ve kategorileri tablosu olsun. Ürün isimlerini kategorileriyle birlikte alacak bir sorgu yazın.