დაკავშირებული ცხრილებიდან მონაცემების მიღება 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

დავუშვათ, გაქვთ ცხრილი პროდუქტებით და ცხრილი მათი კატეგორიებით. დაწერეთ მოთხოვნა, რომელიც დააბრუნებს პროდუქტების სახელებს მათი კატეგორიებით ერთად.