⊗ppPmDOFR 385 of 447 menu

Родствени връзки на данни в 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

Заявки

Нека сега напишем заявка, която ще извлече потребителя заедно с неговия син.

За начало нека просто извлечем потребителите:

SELECT * FROM users

Сега нека присъединим към потребителите техните синове. Ще присъединяваме таблицата сама към себе си, затова трябва да извършим нейно преименуване:

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

Практически задачи

Да предположим, че имаме категории. Всяка категория може да принадлежи на родителска категория, тя от своя страна на своя родителска и така нататък. Описете структурата на съхранение.

Напишете заявка, която ще извлече категория заедно с нейната родителска категория.

Напишете заявка, която ще извлече категория заедно с нейния родител и прародител.

Напишете заявка, която ще извлече категория заедно с нейния родител, прародител и прапрародител.

Български
AfrikaansAzərbaycanবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ние използваме бисквитки за работата на сайта, анализ и персонализация. Обработката на данни се извършва в съответствие с Политика за поверителност.
приемам всички настройки отхвърляне