⊗ppPmDOFR 385 of 447 menu

PHP-те деректердің туыстық байланыстары

Бізде әкелер мен ұлдарды сақтау мәселесі тұрсын. Әр әкеде бір ғана ұл болуы мүмкін, ал ұл өз кезегінде бір ұлға ие болуы мүмкін.

Деректерді қалай сақтайтынымызды ойластыруымыз керек. Ақылға болатын бірінші идея - екі кесте жасау: parents әкелер үшін және sons ұлдар үшін. Содан кейін бұл кестелерді қандай да бір өріспен байланыстыру: son_id немесе parent_id.

Бірақ, бұл идея өте жақсы емес - өйткені бір адам бір уақытта hem әке hem де ұл болуы мүмкін - және оны екі кестеде де сақтауға тура келеді, бұл ыңғайсыз, көбірек орын алады және оңай қателіктерге әкеледі.

Жақсы нұсқа - кестені өзімен-өзі байланыстыру: 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
Біз сайттың жұмысы, аналитика және персонализация үшін cookie файлдарын қолданамыз. Деректерді өңдеу Құпиялылық саясаты бойынша жүреді.
барлығын қабылдау баптау қабылдамау