Marrja e të dhënave nga tabelat e lidhura në PHP
Le të bëjmë një kërkesë që do të marrë
të gjithë përdoruesit së bashku me qytetet e tyre. Për këtë
na nevojitet komanda LEFT
JOIN:
Sintaksa e saj duket si më poshtë:
SELECT fushat FROM emri_i_tabeles
LEFT JOIN emri_i_tabeles_se_lidhur ON kushti_i_lidhjes
WHERE kushti_i_perzgjedhjes
Le të shqyrtojmë pjesët individuale të sintaksës së kësaj komande.
Fushat
Meqenëse përzgjedhja bëhet nga disa tabela,
përzgjedhja e të gjitha fushave përmes * nuk do
të funksionojë. Kërkesa e mëposhtme do të zgjedhë fushat vetëm
nga tabela kryesore, por jo nga ajo e lidhur:
SELECT *
Që të dhënat të zgjidhen nga të gjitha
tabelat, duhet të përcaktohet emri i
tabelës përpara * për përzgjedhje:
SELECT users.*, cities.*
Ose mund të listoni fushat që na duhen duke specifikuar emrin e tabelës përpara tyre:
SELECT users.name, cities.name
Këto dy mënyra kanë një problem. Çështja është se nëse fushat në tabela kanë emra të njëjtë, atëherë në array në PHP do të ketë një konflikt emrash dhe do të mbijetojë vetëm një fushë, ndërsa e dyta nuk do të jetë e pranishme.
Për të zgjidhur problemin, duhet t'u ndryshohet emri
emrave në konflikt përmes komandës as:
SELECT users.name, cities.name as city_name
Lidhja
Pas komandës ON duhet të specifikojmë
fushat nga dy tabelat, përmes të cilave bëhet
lidhja. Në rastin tonë, kjo do të jetë fusha id
nga tabela me qytete dhe fusha city_id
nga tabela me përdoruesit:
ON cities.id=users.city_id
Kërkesa
Si rezultat, kërkesa që do të marrë përdoruesit së bashku me qytetet e tyre do të duket si më poshtë:
SELECT
users.name, cities.name as city_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
Detyra praktike
Supozoni se keni një tabelë me produkte dhe një tabelë me kategoritë e tyre. Shkruani një kërkesë që do të marrë emrat e produkteve së bashku me kategoritë e tyre.