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

Эми колдонуучуларга алардын уулдарын кошобуз (JOIN). Биз таблицаны өзү менен өзүнө кошобуз (JOIN), ошондуктан бизге анын атын өзгөртүү керек:

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

Категорияны анын ата-энеси, чоң ата-энеси жана чоң-чоң ата-энеси менен бирге чогултуп алуучу супрагын жазыңыз.