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:

sqlSELECT 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:

sqlSELECT *

Lai dati tiktu atlasīti no visām tabulām, pirms * jānorāda tabulas nosaukums atlasei:

sqlSELECT users.*, cities.*

Vai arī var uzskaitīt mums nepieciešamos laukus, norādot tabulas nosaukumu pirms tiem:

sqlSELECT 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:

sqlSELECT 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:

sqlON 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:

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

Praktiskie uzdevumi

Задание 1

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.