დაკავშირებული ცხრილებიდან მონაცემების მიღება PHP-ში
მოდით შევქმნათ მოთხოვნა, რომელიც დააბრუნებს
ყველა მომხმარებელს მათ ქალაქებთან ერთად. ამისთვის
ჩვენ გვჭირდება LEFT
JOIN ბრძანება:
მისი სინტაქსი ასე გამოიყურება:
SELECT ველები FROM ცხრილის_სახელი
LEFT JOIN დაკავშირებული_ცხრილის_სახელი ON დაკავშირების_პირობა
WHERE ამორჩევის_პირობა
მოდით განვიხილოთ ამ ბრძანების სინტაქსის ცალკეული ნაწილები.
ველები
რადგან ამორჩევა მიმდინარეობს რამდენიმე ცხრილიდან,
ყველა ველის ამორჩევა *-ის საშუალებით არ
იმუშავებს. შემდეგი მოთხოვნა აირჩევს ველებს მხოლოდ
მთავარი ცხრილიდან, მაგრამ არა დაკავშირებული ცხრილიდან:
SELECT *
იმისთვის, რომ მონაცემები აირჩეს ყველა
ცხრილიდან, საჭიროა *-ის წინ მიუთითოთ
ამორჩევის ცხრილის სახელი:
SELECT users.*, cities.*
ან შეგიძლიათ ჩამოწეროთ ჩვენთვის საჭირო ველები მათ წინ ცხრილის სახელის მითითებით:
SELECT users.name, cities.name
ამ ორ მეთოსს აქვს პრობლემა. საქმე იმაშია, რომ თუ ცხრილებში ველებს აქვთ ერთი და იგივე სახელები, მაშინ PHP-ის მასივში მოხდება სახელების კონფლიქტი და მხოლოდ ერთი ველი დარჩება, ხოლო მეორე არ იქნება.
პრობლემის მოსაგვარებლად საჭიროა კონფლიქტური სახელების
გადარქმევა as ბრძანების საშუალებით:
SELECT users.name, cities.name as city_name
კავშირი
ON ბრძანების შემდეგ ჩვენ უნდა მივუთითოთ
ორი ცხრილის ის ველები, რომლებითაც ხდება
კავშირი. ჩვენს შემთხვევაში ეს იქნება id
ველი ქალაქების ცხრილიდან და city_id
ველი მომხმარებლების ცხრილიდან:
ON cities.id=users.city_id
მოთხოვნა
საბოლოოდ, მოთხოვნა, რომელიც დააბრუნებს მომხმარებლებს მათ ქალაქებთან ერთად, ასე გამოიყურება:
SELECT
users.name, cities.name as city_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
პრაქტიკული ამოცანები
დავუშვათ, გაქვთ ცხრილი პროდუქტებით და ცხრილი მათი კატეგორიებით. დაწერეთ მოთხოვნა, რომელიც დააბრუნებს პროდუქტების სახელებს მათი კატეგორიებით ერთად.