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:

sqlSELECT 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:

sqlSELECT *

Maglumatlaryň hemme tablisalardan saýlanmagy üçin, *-den öň saýlama tablisasynyň adyny görkezmeli:

sqlSELECT users.*, cities.*

Ýa-da bolsa, gerekli meýdanlary, olaryň öňünde tablisanyň ady bilen sanap görkezmelidir:

sqlSELECT 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:

sqlSELECT 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:

sqlON cities.id=users.city_id

Sorag

Netijede, ulanyjylary şäherleri bilen birlikde alyp gelýän sorag aşakdaky ýaly görüner:

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

Amaly wezipler

Задание 1

Siziň harytlar tablisasyz we olaryň kategoriýalary tablisasyz bardygyňyzy farz edeli. Harytlaryň atlaryny kategoriýalary bilen birlikde alyp gelýän sorag ýazyň.