⊗ppPmDOLVT 384 of 447 menu

PHP'де байланыш таблицасы аркылуу байланыштуулук

Эми колдонуучу ар кайсы шаарларда болгон дейли. Бул учурда колдонуучулар таблицасы төмөнкүдөй көрүнүшкө ээ болушу мүмкүн:

колдонуучулар
id аты шаар
1 колдонуучу1 шаар1, шаар2, шаар3
2 колдонуучу2 шаар1, шаар2
3 колдонуучу3 шаар2, шаар3
4 колдонуучу4 шаар1

Маалыматтарды ушундай сактоо туура эмес экени түшүнүктүү - шаарларды өзүнчө таблицага жайгаштыруу керек. Мына ал:

шаарлар
id аты
1 шаар1
2 шаар2
3 шаар3

Бирок, ар бир колдонуучу бир нече шаарга шилтеме жасай алышы үчүн кылуу керек. Эки таблица менен муну ишке ашыруу мүмкүн эмес.

Бизге колдонуучуну анын шаарлары менен байланыштыруучу байланыш таблицасы деп аталган нерсени киргизиш керек.

Бул таблицанын ар бир жазмасында колдонуучу менен бир шаардын ортосундагы байланыш сакталат. Бул учурда бир колдонуучу үчүн бул таблицада ал канча шаарда болсо, ошончо жазма болот.

Мына биздин байланыш таблицабыз:

колдонуучулар_шаарлар
id колдонуучу_id шаар_id
1 1 1
2 1 2
3 1 3
4 2 1
5 2 2
6 3 2
7 3 3
8 4 1

Колдонуучулар таблицасы колдонуучулардын аттарын гана, байланышсыз сактайт:

колдонуучулар
id аты
1 колдонуучу1
2 колдонуучу2
3 колдонуучу3
4 колдонуучу4
5 колдонуучу5

Суроолор

Келгиле, колдонуучуларды алардын шаарлары менен кошо алууга мүмкүндүк берген суроо жасайлы. Бул үчүн бизге эки кошуу керек: биринчи кошуу колдонуучуларга байланыш таблицасын кошот, экинчи кошуу болсо байланыштар аркылуу шаарларды кошот:

SELECT колдонуучулар.аты колдонуучу_аты катары, шаарлар.аты шаар_аты катары FROM колдонуучулар LEFT JOIN колдонуучулар_шаарлар ON колдонуучулар_шаарлар.колдонуучу_id=колдонуучулар.id LEFT JOIN шаарлар ON колдонуучулар_шаарлар.шаар_id=шаарлар.id

Суроонун натыйжасы

PHP'деги биздин сурообуздун натыйжасы ар бир колдонуучунун атын, ал канча шаар менен байланышкан болсо, ошончо жолу камтыйт:

<?php $arr = [ ['колдонуучу_аты' => 'колдонуучу1', 'шаар_аты' => 'шаар1'], ['колдонуучу_аты' => 'колдонуучу1', 'шаар_аты' => 'шаар2'], ['колдонуучу_аты' => 'колдонуучу1', 'шаар_аты' => 'шаар3'], ['колдонуучу_аты' => 'колдонуучу2', 'шаар_аты' => 'шаар1'], ['колдонуучу_аты' => 'колдонуучу2', 'шаар_аты' => 'шаар2'], ['колдонуучу_аты' => 'колдонуучу3', 'шаар_аты' => 'шаар2'], ['колдонуучу_аты' => 'колдонуучу3', 'шаар_аты' => 'шаар3'], ['колдонуучу_аты' => 'колдонуучу4', 'шаар_аты' => 'шаар1'], ]; ?>

Мындай массивди конвертациялоо жана аны төмөнкүгө айландыруу ыңгайлуу болмок:

<?php $res = [ ['колдонуучу1' => ['шаар1', 'шаар2', 'шаар3']], ['колдонуучу2' => ['шаар1', 'шаар2']], ['колдонуучу3' => ['шаар2', 'шаар3']], ['колдонуучу4' => ['шаар1']], ]; ?>

Мындай конвертацияны ишке ашыруучу код жазалы:

<?php $res = []; foreach ($data as $elem) { $res[$elem['колдонуучу_аты']][] = $elem['шаар_аты']; } var_dump($res); ?>

Практикалык тапшырмалар

Товар бир нече категорияга таандык болушу мүмкүн дейли. Сактоо структурасын жазып чыгыңыз.

Товарларды алардын категориялары менен кошо алуучу суроо жазыңыз.

Алынган маалыматты төмөнкүдөй ul тизмеси түрүндө чыгарыңыз: ар бир li'де алгач продукттун аты турушу керек, андан кийин эки нуктан кийин үтүр менен бөлүнүп, ушул продукттун категориялары көрсөтүлүшү керек. Мисалы:

<ul> <li>продукт1: категория1, категория2, категория3</li> <li>продукт2: категория1, категория3</li> <li>продукт3: категория1</li> </ul>
Кыргызча
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 файлдарын колдонобуз. Маалыматтарды иштетүү Маалыматты коргоо саясаты боюнча жүргүзүлөт.
баарын кабыл алуу ыңгайлаштыруу четке кагуу