Вобастагии додуфарзандӣ дар 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
Масъалаҳои амалӣ
Фарз кунем, ки мо категорияҳо дорем. Ҳар як категория метавонад ба категорияи волидайн тааллуқ дошта бошад, он аз нав ба волидайни худ ва ҳамин тавр то ин ҷо. Сохтори нигоҳдорӣро тавсиф кунед.
Дархостеро нависед, ки категорияро бо категорияи волидайни он ба даст орад.
Дархостеро нависед, ки категорияро бо волидайни он ва бобои он ба даст орад.
Дархостеро нависед, ки категорияро бо волидайни он, бобои он ва падарбобои он ба даст орад.