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
Практикалык тапшырмалар
Сизде товарлар таблицасы жана алардын категориялары таблицасы бар деп коёлу. Товарлардын аттарын алардын категориялары менен бирге чогултуп алуучу суроо жазыңыз.