Duomenų gavimas iš susijusių lentelių PHP
Padarykime užklausą, kuri gaus
visus vartotojus kartu su jų miestais. Tam
mums reikės LEFT
JOIN komandos:
Jos sintaksė atrodo taip:
SELECT laukai FROM lentelės_pavadinimas
LEFT JOIN susietos_lentelės_pavadinimas ON ryšio_sąlyga
WHERE atrankos_sąlyga
Išnagrinėkime atskiras šios komandos sintaksės dalis.
Laukai
Kadangi atranka vyksta iš kelių lentelių,
visų laukų atranka naudojant * neveiks.
Ši užklausa pasirinks laukus tik
iš pagrindinės lentelės, bet ne iš susietos:
SELECT *
Kad duomenys būtų renkami iš visų
lentelių, prieš * reikia nurodyti
lentelės pavadinimą atrankai:
SELECT users.*, cities.*
Arba galima išvardinti mums reikalingus laukus nurodant lentelės pavadinimą prieš juos:
SELECT users.name, cities.name
Šie du būdai turi problemą. Taip yra dėl to, kad jei laukai lentelėse turi vienodus pavadinimus, tai PHP masyve įvyks pavadinimų konfliktas ir laimės tik vienas laukas, o antrojo nebus.
Problemai išspręsti reikia konfliktuojančius pavadinimus
pervadinti naudojant as komandą:
SELECT users.name, cities.name as city_name
Ryšys
Po ON komandos turime nurodyti
laukus iš dviejų lentelių, pagal kuriuos užmezgamas
ryšys. Mūsų atveju tai bus laukas id
iš miestų lentelės ir laukas city_id
iš vartotojų lentelės:
ON cities.id=users.city_id
Užklausa
Galų gale užklausa, kuri gaus vartotojus kartu su jų miestais atrodys taip:
SELECT
users.name, cities.name as city_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
Praktinės užduotys
Tarkime, kad turite prekių lentelę ir lentelę su jų kategorijomis. Parašykite užklausą, kuri gautų prekių pavadinimus kartu su jų kategorijomis.