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
Գործնական առաջադրանքներ
Ենթադրենք ունեք ապրանքների աղյուսակ և աղյուսակ դրանց կատեգորիաներով: Գրեք հարցում, որը կվերցնի ապրանքների անունները իրենց կատեգորիաների հետ միասին: