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:
SELECT 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:
SELECT *
Jotta tiedot haettaisiin kaikista
tauluista, tulee *:n eteen määrittää taulun nimi
haulle:
SELECT users.*, cities.*
Vaihtoehtoisesti voidaan luetella tarvitsemamme kentät määrittämällä taulun nimi niiden edessä:
SELECT 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:
SELECT 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:
ON cities.id=users.city_id
Kysely
Lopulta kysely, joka hakee käyttäjät yhdessä heidän kaupunkiensa kanssa on seuraava:
SELECT
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
Oletetaan, että sinulla on tuotetaulu ja taulu niiden kategorioille. Kirjoita kysely, joka hakee tuotteiden nimet yhdessä niiden kategorioiden kanssa.