Adatok lekérése kapcsolt táblákból PHP-ben
Készítsünk egy lekérdezést, amely
kilistázza az összes felhasználót a városaikkal együtt. Ehhez
szükségünk lesz a LEFT
JOIN parancsra:
Ennek szintaxisa a következő:
SELECT mezők FROM tábla_neve
LEFT JOIN kapcsolt_tábla_neve ON kapcsolati_feltétel
WHERE kiválasztási_feltétel
Nézzük meg részletesen a parancs szintaxisának egyes részeit.
Mezők
Mivel a kiválasztás több táblából történik,
az összes mező kiválasztása a * segítségével
nem fog működni. A következő lekérdezés csak a főtábla
mezőit választja ki, de nem a kapcsolt tábláét:
SELECT *
Ahhoz, hogy az adatok minden táblából
kiválasztásra kerüljenek, a * elé meg kell
adni a tábla nevét, amelyből választunk:
SELECT users.*, cities.*
Vagy felsorolhatjuk a szükséges mezőket a tábla nevével együtt előttük:
SELECT users.name, cities.name
Ennek a két módszernek van egy problémája. Az, hogy ha a táblákban lévő mezőknek azonos a nevük, akkor a PHP tömbben névütközés következik be, és csak egy mező marad, a másik pedig nem lesz jelen.
A probléma megoldásához az ütköző neveket
át kell nevezni a as paranccsal:
SELECT users.name, cities.name as city_name
Kapcsolat
A ON parancs után meg kell adnunk
a két tábla azon mezőit, amelyek alapján a
kapcsolat létrejön. Esetünkben ez a id
mező a városok táblájából és a city_id
mező a felhasználók táblájából:
ON cities.id=users.city_id
Lekérdezés
Végeredményben a felhasználókat városaikkal együtt kilistázó lekérdezés így fog kinézni:
SELECT
users.name, cities.name as city_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
Gyakorlati feladatok
Tegyük fel, hogy van egy termékek táblája és egy kategóriáik táblája. Írj egy lekérdezést, amely kilistázza a termékek nevét a kategóriáikkal együtt.