PHP'деги маалыматтардын туугандык байланыштары
Алдыбызга аталарды жана уулдарды сактоо милдети коюлсын. Ар бир атанын бир гана уулу болсун, ал эми уул өз кезегинде бир гана уулга ээ болушу мүмкүн.
Биз маалыматтарды кантип сактай тургандыгыбызды ойлоп табышыбыз керек.
Акылга биринчи келген ой - эки таблица түзүү: аталар үчүн parents жана
уулдар үчүн sons. Андан кийин бул таблицаларды бир кандайдыр талаа менен байланыштыруу: son_id
же parent_id.
Бирок, бул ой абдан жакшы эмес - анткени бир эле адам ошол эле учурда ата да, уул да болушу мүмкүн - жана аны эки таблицада сактоого туура келет, бул ыңгайсыз, көбүрөөк орун ээлейт жана каталарга алып келүүгө оңой.
Жакшыраак варианты - таблицаны өзү
менен өзү байланыштыруу: users таблицасын түзөлү,
анын ичинде бардык колдонуучуларды сактайбыз жана ар бирине
son_id талаасын түзөбүз, ал талаада ошол эле таблицадагы
уулдун id сакталат:
| id | name | son_id |
|---|---|---|
| 1 | user1 | 2 |
| 2 | user2 | 3 |
| 3 | user3 | null |
Супрагулар
Эми колдонуучуну анын уулу менен чогултуп алган супрагын жазалы.
Башында жөн гана колдонуучуларды чогултуп алалы:
SELECT
*
FROM
users
Эми колдонуучуларга алардын уулдарын кошобуз (JOIN). Биз таблицаны өзү менен өзүнө кошобуз (JOIN), ошондуктан бизге анын атын өзгөртүү керек:
LEFT JOIN users as sons
Эми биз негизги таблица менен аты өзгөртүлгөн таблицанын ортосундагы байланышты көрсөтө алабыз:
LEFT JOIN users as sons ON sons.id=users.son_id
Эми талааларды көрсөтөлү:
SELECT
users.name as user_name, sons.name as son_name
Баарын бириктирип, төмөнкү супрагын алабыз:
SELECT
users.name as user_name, sons.name as son_name
FROM
users
LEFT JOIN users as sons ON sons.id=users.son_id
Практикалык тапшырмалар
Анда бизде категориялар бар дейли. Ар бир категория ата-эне категориясына тиешелүү болушу мүмкүн, ал өз кезегинде өзүнүн ата-энесине жана ушу сыяктуу аракеттерге таандык. Сақтоо түзүмүн сүрөттөп бериңиз.
Категорияны анын ата-эне категориясы менен бирге чогултуп алуучу супрагын жазыңыз.
Категорияны анын ата-энеси жана чоң ата-энеси менен бирге чогултуп алуучу супрагын жазыңыз.
Категорияны анын ата-энеси, чоң ата-энеси жана чоң-чоң ата-энеси менен бирге чогултуп алуучу супрагын жазыңыз.