Дар PHP аз ҷадвалҳои пайвастшуда маълумот гирифтан

Биёед як дархост созем, ки ҳамаи корбаронро бо шаҳрҳои онҳо мегирад. Барои ин ба мо фармони LEFT JOIN лозим аст:

Синтаксиси он ба тариқи зерин мебошад:

sqlSELECT майдонҳо FROM номи_ҷадвал
  LEFT JOIN номи_ҷадвали_пайвастшуда ON шарти_пайваст
WHERE шарти_интихоб

Биёед қисмҳои алоҳидаи синтаксиси ин фармонро таҳлил кунем.

Майдонҳо

Аз он ҷое ки интихоб аз чанд ҷадвал сурат мегирад, интихоби ҳамаи майдонҳо тавассути * кор нахоҳад кард. Дархости зерин фақат майдонҳоро аз ҷадвали асосӣ интихоб мекунад, на аз ҷадвали пайвастшуда:

sqlSELECT *

Барои он ки маълумот аз ҳама ҷадвалҳо интихоб шавад, пеш аз * бояд номи ҷадвалеро барои интихоб муайян кард:

sqlSELECT users.*, cities.*

Ё шумо метавонед майдонҳои заруриро бо муайян кардани номи ҷадвал пеш аз онҳо номбар кунед:

sqlSELECT users.name, cities.name

Ин ду равиш мушкилӣ доранд. Масъала ин аст, ки агар майдонҳо дар ҷадвалҳо номҳои якхела дошта бошанд, дар массиви PHP зиддияти номҳо рух медиҳад ва фақат як майдон ғолиб меояд ва дуюмаш вуҷуд надорад.

Барои ҳалли мушкилӣ бояд номҳои зиддиятро тавассути фармони as тағйир дод:

sqlSELECT users.name, cities.name as city_name

Пайваст

Пас аз фармони ON мо бояд майдонҳоеро аз ду ҷадвал муайян кунем, ки пайвастгӣ тавассути онҳо амалӣ мешавад. Дар ҳолати мо ин майдони id аз ҷадвали шаҳрҳо ва майдони city_id аз ҷадвали корбарон хоҳад буд:

sqlON cities.id=users.city_id

Дархост

Дар ниҳоят дархости, ки корбаронро бо шаҳрҳои онҳо мегирад, ба тариқи зерин хоҳад буд:

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

Вазифаҳои амалӣ

Задание 1

Фарз мекунем, ки шумо ҷадвали маҳсулот ва ҷадвали категорияҳои онҳоро доред. Як дархост нависед, ки номҳои маҳсулотро бо категорияҳои онҳо мегирад.