PHP හි සම්බන්ධිත වගු වලින් දත්ත ලබා ගැනීම

අපි සියලුම භාවිතාකරුවන් ඔවුන්ගේ නගර සමඟ ලබා ගන්න විමසුමක් සකස් කරමු. මේ සඳහා අපට LEFT JOIN විධානය අවශ්‍ය වනු ඇත:

එහි වාක්‍ය ඛණ්ඩය පහත පරිදි වේ:

sqlSELECT fields FROM table_name
  LEFT JOIN related_table_name ON join_condition
WHERE selection_condition

මෙම විධානයේ වාක්‍ය ඛණ්ඩයේ කොටස් වෙන් වෙන් වශයෙන් බලමු.

ක්ෂේත්‍ර

තෝරාගැනීම කිහිපයක් වගු වලින් සිදුවන බැවින්, * හරහා සියලුම ක්ෂේත්‍ර තෝරා ගැනීම ක්‍රියා නොකරනු ඇත. පහත විමසුම ප්‍රධාන වගුවේ ක්ෂේත්‍ර පමණක් තෝරාගනු ඇත, නමුත් සම්බන්ධිත වගුවේ ක්ෂේත්‍ර නොවේ:

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

ඔබට භාණ්ඩ සහිත වගුවක් සහ වගුවක් ඇතැයි සිතමු ඔවුන්ගේ ප්‍රවර්ග සමඟ. භාණ්ඩවල නම් ලබා ගන්න විමසුමක් ලියන්න ඔවුන්ගේ ප්‍රවර්ග සමඟ.