PHP හි දත්තවල ඥාති සබඳතා

අප ඉදිරියේ පියවරුන් සහ පුතුන් ගබඩා කිරීමේ කාර්යයක් ඇතැයි සිතමු. සෑම පියෙකුටම එක් පුතෙකු සිටිය හැකි අතර, පුතාටද අනුක්‍රමයෙන් එක් පුතෙකු සිටිය හැකිය.

දත්ත ගබඩා කරන්නේ කෙසේදැයි සිතා ගත යුතුය. මනසට පැමිණිය හැකි පළමු අදහස වන්නේ වගු දෙකක් සෑදීමයි: පියවරුන් සඳහා parents සහ පුතුන් සඳහා sons. ඉන්පසු මෙම වගු සම්බන්ධ කරන්න යම් ක්ෂේත්‍රයක් සමඟ: son_id හෝ parent_id.

කෙසේ වෙතත්, මෙය හොඳ අදහසක් නොවේ - මන්ද එකම පුද්ගලයාට එකවරම විය හැකිය පියෙකු සහ පුතෙකු ලෙස - එය ගබඩා කිරීමට සිදුවනු ඇත වගු දෙකෙහිම, මෙය අපහසුය, අඩු කරයි වැඩි ඉඩක් සහ දෝෂ වලට පහසුවෙන් මග පාදයි.

වඩා හොඳ විකල්පයක් වන්නේ වගුවම සම්බන්ධ කිරීමයි සමඟ: අපි users වගුව සාදමු, අපි සියලු පරිශීලකයින් ගබඩා කරන අතර සෑම අයෙකුටම සාදන්නෙමු ක්ෂේත්‍රය son_id, එහි ගබඩා කරනු ඇත මෙම වගුවෙන්ම id පුතා:

users
id name son_id
1 user1 2
2 user2 3
3 user3 null

විමසුම්

දැන් අපි පරිශීලකයා ලබා ගන්නා විමසුමක් ලියමු ඔහුගේ පුතා සමඟ.

පළමුව, අපි පරිශීලකයන් ලබා ගනිමු:

sqlSELECT
  *
FROM
  users

දැන් අපි පරිශීලකයින් සමඟ ඔවුන්ගේ පුතුන් එක් කරමු. එක් කිරීම අපි වගුවම කරන්නෙමු, එබැවින් අපට එහි නම වෙනස් කිරීම සිදු කිරීමට අවශ්‍යය:

sqlLEFT JOIN users as sons

දැන් අපට ප්‍රධාන වගුවේ සම්බන්ධතාවය නියම කළ හැකිය සහ නම වෙනස් කරන ලද:

sqlLEFT JOIN users as sons ON sons.id=users.son_id

දැන් ක්ෂේත්‍ර නියම කරමු:

sqlSELECT
  users.name as user_name, sons.name as son_name

අපි සියල්ල එකට එකතු කර පහත විමසුම ලබා ගනිමු:

sqlSELECT
  users.name as user_name, sons.name as son_name
FROM
  users
LEFT JOIN users as sons ON sons.id=users.son_id

ප්‍රායෝගික කාර්යයන්

Задание 1

අපට වර්ග ඇතැයි සිතමු. සෑම කාණ්ඩයක්ම මව් කාණ්ඩයකට අයත් විය හැකිය, එය අනුක්‍රමයෙන් එහි මව් කාණ්ඩයට සහ එසේම පසුව. ගබඩා කිරීමේ ව්‍යුහය සකස් කරන්න.

Задание 2

එය සමඟම කාණ්ඩය ලබා ගන්නා විමසුමක් ලියන්න එහි මව් කාණ්ඩය.

Задание 3

එය සමඟම කාණ්ඩය ලබා ගන්නා විමසුමක් ලියන්න එහි මව් සහ මුතුන් මිත්තන් සමඟ.

Задание 4

එය සමඟම කාණ්ඩය ලබා ගන්නා විමසුමක් ලියන්න එහි මව්, මුතුන් මිත්තන් සහ මුතුන් මිත්තන් සමඟ.