İ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:
SELECT 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:
SELECT *
Verilerin tüm tablolardan seçilmesi için,
* önünde seçimin yapılacağı tablonun
adı belirtilmelidir:
SELECT users.*, cities.*
Ya da ihtiyacımız olan alanları, önlerinde tablo adı belirterek listeleyebiliriz:
SELECT 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:
SELECT 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:
ON cities.id=users.city_id
Sorgu
Sonuçta, kullanıcıları şehirleriyle birlikte alacak sorgu aşağıdaki gibi olacaktır:
SELECT
users.name, cities.name as city_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
Pratik Görevler
Elinizde ürünler tablosu ve kategorileri tablosu olsun. Ürün isimlerini kategorileriyle birlikte alacak bir sorgu yazın.