Tietojen hakeminen liitetyistä tauluista PHP:ssä

Tehdään kysely, joka hakee kaikki käyttäjät yhdessä heidän kaupunkiensa kanssa. Tätä varten tarvitsemme LEFT JOIN -komennon:

Sen syntaksi on seuraava:

sqlSELECT kentät FROM taulun_nimi
  LEFT JOIN liitetyn_taulun_nimi ON linkkiehto 
WHERE hakuehto

Käydään läpi tämän komennon syntaksin yksittäiset osat.

Kentät

Koska haku tapahtuu useista tauluista, kaikkien kenttien haku *:lla ei toimi. Seuraava kysely valitsee kentät vain päätaulusta, mutta ei liitetystä taulusta:

sqlSELECT *

Jotta tiedot haettaisiin kaikista tauluista, tulee *:n eteen määrittää taulun nimi haulle:

sqlSELECT users.*, cities.*

Vaihtoehtoisesti voidaan luetella tarvitsemamme kentät määrittämällä taulun nimi niiden edessä:

sqlSELECT users.name, cities.name

Näissä kahdessa menetelmässä on ongelma. Asia on siinä, että jos kentät tauluissa ovat samannimisiä, tapahtuu PHP-taulukossa nimikonflikti ja vain yksi kenttä voittaa, eikä toista ole.

Ongelman ratkaisemiseksi on ristiriitaiset nimet nimetä uudelleen as -komennolla:

sqlSELECT users.name, cities.name as city_name

Linkki

ON -komennon jälkeen meidän on määritettävä kahden taulun kentät, joiden kautta yhteys toteutuu. Meidän tapauksessamme nämä ovat kentät id kaupunkien taulusta ja kenttä city_id käyttäjien taulusta:

sqlON cities.id=users.city_id

Kysely

Lopulta kysely, joka hakee käyttäjät yhdessä heidän kaupunkiensa kanssa on seuraava:

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

Käytännön tehtävät

Задание 1

Oletetaan, että sinulla on tuotetaulu ja taulu niiden kategorioille. Kirjoita kysely, joka hakee tuotteiden nimet yhdessä niiden kategorioiden kanssa.