PHPда богланган jадваллардан маълумот олиш

Келгила, барча фойдаланувчиларни шахарлари билан бирга оладиган сўров ясайлик. Бунинг учун бизга LEFT JOIN командаси керак бўлади:

Унинг синтаксиси quyidagicha кўринишади:

sqlSELECT майдонлар FROM jадвал_номи
  LEFT JOIN богланган_jадвал_номи ON богланиш_шарти 
WHERE танлаб_олиш_шарти

Келгила, ushbu команда синтаксисининг алохида қисмларини tushunib olaylik.

Майдонлар

Нечата jадвалдан маълумот олингани sababli, * орқали барча майдонларни олиш ишламaydi. Quyidagi сўров факат asosiy jадвалning майдонларини tanlaydi, богланган jадвалникини emas:

sqlSELECT *

Барча jадваллардан маълумот olish учун, * oldidan jадвал номини кўрсатиш керак:

sqlSELECT users.*, cities.*

Ёки керакли майдонларни уларнинг олдига jадвал номини кўрсатиб рўйхатлаш мумкин:

sqlSELECT users.name, cities.name

Бу икки usulda muammо бор. Гap икки jадвалдаги майдон номлари бир хил бўлса, PHP массивида номлар toʻqnashadi ва факат битта майдон қолади, иккинчиси бўлмайди.

Бу muammoni ҳал қилиш учун toʻqnashayotgan номларни as командаси орқали ўзгартириш керак:

sqlSELECT users.name, cities.name as city_name

Богланиш

ON командасидан кейин биз икки jадвал oртaсидаги богланишни аникловчи майдонларни кўрсатишимиз керак. Бизнинг ҳолимизда бу шахарлар jадвалидаги id майдони ва фойдаланувчилар jадвалидаги city_id майдони бўлади:

sqlON cities.id=users.city_id

Сўров

Натижада, фойдаланувчиларни шахарлари билан бирга олувчи сўров quyidagicha кўринишади:

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

Амалий вазифалар

Задание 1

Фарз қилайлик, сизда товарлар jадвали ва уларнинг туркумлари jадвали бор. Товар номларини уларнинг туркумлари билан бирга олadigan сўров язинг.