Data-ontsluiting uit verwante tabelle in PHP
Laat ons 'n navraag maak wat alle gebruikers saam met hul stede sal haal. Vir dit
benodig ons die LEFT
JOIN opdrag:
Die sintaksis daarvan lyk soos volg:
SELECT velde FROM tabelnaam
LEFT JOIN verwante_tabelnaam ON skakelvoorwaarde
WHERE keuringsvoorwaarde
Laat ons die individuele dele van hierdie opdrag se sintaksis ontleed.
Velde
Aangesien die keuring uit verskeie tabelle kom,
sal die keuring van alle velde deur * nie
werk nie. Die volgende navraag sal slegs velde kies
uit die hoof tabel, maar nie uit die verwante tabel nie:
SELECT *
Om te verseker dat data uit alle tabelle gekies word,
moet die tabelnaam vir die keuring voor * gespesifiseer word:
SELECT users.*, cities.*
Alternatiewelik kan jy die benodigde velde opsom met die tabelnaam voor hulle:
SELECT users.name, cities.name
Hierdie twee metodes het 'n probleem. Die saak is, indien die velde in die tabelle dieselfde name het, sal daar 'n naamkonflik in die PHP-array wees en sal slegs een veld wen, en die tweede een sal nie daar wees nie.
Om die probleem op te los, moet die konflikterende name
hernoem word deur die as opdrag:
SELECT users.name, cities.name as city_name
Skakel
Na die ON opdrag moet ons die
velde uit die twee tabelle spesifiseer waarvolgens die
skakel plaasvind. In ons geval sal dit die veld id
uit die tabel met stede en die veld city_id
uit die tabel met gebruikers wees:
ON cities.id=users.city_id
Navraag
Uiteindelik sal die navraag wat gebruikers saam met hul stede sal haal soos volg lyk:
SELECT
users.name, cities.name as city_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
Praktiese take
Gestel jy het 'n tabel met produkte en 'n tabel met hul kategorieë. Skryf 'n navraag wat die name van die produkte saam met hul kategorieë sal haal.