PHP-de baglanyşykly tablisalardan maglumat almak
Hemmä ulanyjylary şäherleri bilen birlikde alýan sorag ýerine ýetireli. Bunuň üçin
bize LEFT
JOIN buýrugy gerek bolar:
Onuň sintaksisi aşakdaky ýaly görünýär:
SELECT meýdanlar FROM tablisa_ady
LEFT JOIN baglanyşykly_tablisa_ady ON baglanyşyk_şerti
WHERE saýlama_şerti
Geliň, bu buýrugyň sintaksisiniň aýry-ayry böleklerini düşüneli.
Meýdanlar
Birnäçe tablisadan saýlama geçirilýändigi üçin,
* arkaly hemme meýdanlary saýlamak işlemez.
Aşakdaky sorag diňe esasy tablisanyň meýdanlaryny saýlar,
ýöne baglanyşykly tablisanyňkyny saýlamaz:
SELECT *
Maglumatlaryň hemme tablisalardan saýlanmagy üçin,
*-den öň saýlama tablisasynyň adyny görkezmeli:
SELECT users.*, cities.*
Ýa-da bolsa, gerekli meýdanlary, olaryň öňünde tablisanyň ady bilen sanap görkezmelidir:
SELECT users.name, cities.name
Bu iki usulyň bir meselesi bar. Şonuň ýaly-da, eger tablisalardaky meýdanlar birmeňzeş atlara eýe bolsa, onda PHP massiwinde at çaknyşygy bolup, diňe bir meýdan ýeňer, ikinjisi bolmaz.
Bu meseleni çözmek üçin, çaknyşýan atlary as buýrugy arkaly
atlandyrmaly:
SELECT users.name, cities.name as city_name
Baglanyşyk
ON buýrugyndan soň, baglanyşygyň amala aşyrylýan
iki tablisanyň meýdanlaryny görkezmeli. Bizim ýagdaýymyzda bu,
şäherler tablisasyndaky id meýdany we ulanyjylar
tablisasyndaky city_id meýdany bolar:
ON cities.id=users.city_id
Sorag
Netijede, ulanyjylary şäherleri bilen birlikde alyp gelýän sorag aşakdaky ýaly görüner:
SELECT
users.name, cities.name as city_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
Amaly wezipler
Siziň harytlar tablisasyz we olaryň kategoriýalary tablisasyz bardygyňyzy farz edeli. Harytlaryň atlaryny kategoriýalary bilen birlikde alyp gelýän sorag ýazyň.