Datu iegūšana no saistītajām tabulām PHP
Veiksim vaicājumu, kas iegūs visus lietotājus kopā ar viņu pilsētām. Šim nolūkam mums būs nepieciešama komanda LEFT JOIN:
Tās sintakse izskatās šādi:
SELECT lauki FROM tabulas_nosaukums
LEFT JOIN saistītās_tabulas_nosaukums ON savienojuma_nosacījums
WHERE atlases_nosacījums
Analizēsim atsevišķas šīs komandas sintakses daļas.
Lauki
Tā kā atlase notiek no vairākām tabulām, tad visu lauku atlase, izmantojot *, nedarbosies. Šāds vaicājums atlasīs laukus tikai no galvenās tabulas, bet ne no saistītās:
SELECT *
Lai dati tiktu atlasīti no visām tabulām, pirms * jānorāda tabulas nosaukums atlasei:
SELECT users.*, cities.*
Vai arī var uzskaitīt mums nepieciešamos laukus, norādot tabulas nosaukumu pirms tiem:
SELECT users.name, cities.name
Šīm divām metodēm ir problēma. Tas ir tāpēc, ka, ja lauki tabulās ir ar vienādiem nosaukumiem, tad PHP masīvā notiks nosaukumu konflikts, un uzvarēs tikai viens lauks, bet otrā nebūs.
Lai atrisinātu problēmu, konfliktējošos nosaukumus jāpārsauc, izmantojot komandu as:
SELECT users.name, cities.name as city_name
Saite
Pēc komandas ON mums jānorāda lauki no divām tabulām, pēc kuriem tiek veikta saite. Mūsu gadījumā tas būs lauks id no pilsētu tabulas un lauks city_id no lietotāju tabulas:
ON cities.id=users.city_id
Vaicājums
Rezultātā vaicājums, kas iegūs lietotājus kopā ar viņu pilsētām, izskatīsies šādi:
SELECT
users.name, cities.name as city_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
Praktiskie uzdevumi
Pieņemsim, ka jums ir tabula ar precēm un tabula ar to kategorijām. Uzrakstiet vaicājumu, kas iegūs preču nosaukumus kopā ar to kategorijām.