⊗ppPmDOLVT 384 of 447 menu

PHP да боғланиш жадвали орқали боғлаш

Энди фойдаланувчи турли шахарларда бўлган деб фараз қилайлик. Бу ҳолда фойдаланувчилар жадвали куйидаги кўринишда бўлар эди:

users
id name city
1 user1 city1, city2, city3
2 user2 city1, city2
3 user3 city2, city3
4 user4 city1

Маълумотларни шундай сақлаш нотўғри эканлиги тушунарли - шахарларни алохида жадвалга чиқариш керак. Мана у:

cities
id name
1 city1
2 city2
3 city3

Аммо, биз ҳар бир фойдаланувчи бир нечта шахарларга ишора қила олишини таъминлашимиз керак. Иккита жадвал ёрдамида буни амалга ошириб бўлмайди.

Бизга боғланиш жадвали деб аталувчи жадвални киритиш зарур бўлади, у фойдаланувчини унинг шахарлари билан боғлаб беради.

Бу жадвалнинг ҳар бир ёзувида фойдаланувчи билан битта шахар ўртасидаги боғланиш сақланади. Бу ҳолда бир фойдаланувчи учун бу жадвалда у бўлган шахарлар сони қадар ёзув бўлади.

Мана бизнинг боғланиш жадвалимиз:

users_cities
id user_id city_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

Фойдаланувчилар жадвали фақат фойдаланувчи исмларини сақлайди, боғланишларсиз:

users
id name
1 user1
2 user2
3 user3
4 user4
5 user5

Сўровлар

Келинг, фойдаланувчиларни уларнинг шахарлари билан бирга олиб чиқадиган сўров ясайлик. Бунинг учун бизга иккита join амалга ошириш зарур бўлади: биринчи join фойдаланувчиларга боғланиш жадвалини қўшади, иккинчи join эса боғланишлар орқали шахарларни қўшади:

SELECT users.name as user_name, cities.name as city_name FROM users LEFT JOIN users_cities ON users_cities.user_id=users.id LEFT JOIN cities ON users_cities.city_id=cities.id

Сўров натижаси

Бизнинг сўровимизнинг PHP даги натижаси ҳар бир фойдаланувчи исмини шу фойдаланувчи боғланган шахарлар сони қадар такрорлайди:

<?php $arr = [ ['user_name' => 'user1', 'city_name' => 'city1'], ['user_name' => 'user1', 'city_name' => 'city2'], ['user_name' => 'user1', 'city_name' => 'city3'], ['user_name' => 'user2', 'city_name' => 'city1'], ['user_name' => 'user2', 'city_name' => 'city2'], ['user_name' => 'user3', 'city_name' => 'city2'], ['user_name' => 'user3', 'city_name' => 'city3'], ['user_name' => 'user4', 'city_name' => 'city1'], ]; ?>

Бундай масссивни конвертация қилиб, уни куйидагига айлантириш қулайрок бўлар эди:

<?php $res = [ ['user1' => ['city1', 'city2', 'city3']], ['user2' => ['city1', 'city2']], ['user3' => ['city2', 'city3']], ['user4' => ['city1']], ]; ?>

Бундай конвертацияни бажарадиган код ёзайлик:

<?php $res = []; foreach ($data as $elem) { $res[$elem['user_name']][] = $elem['city_name']; } var_dump($res); ?>

Амалий машқлар

Маҳсулт бир нечта категорияларга тегишли бўлиши мумкин деб фараз қилайлик. Сақлаш тузилмасини ёзиб беринг.

Маҳсултларни уларнинг категориялари билан бирга олиб чиқадиган сўровни ёзинг.

Олинган маълумотларни ul рўйхат шаклида чиқаринг, ҳар бир li да аввал маҳсулот номи, кейин қос ишора орқали ушбу маҳсулотнинг категориялари вергул билан ажратиб кўрсатилсин. Тахминан шундай:

<ul> <li>product1: category1, category2, category3</li> <li>product2: category1, category3</li> <li>product3: category1</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çeOʻzbekTiếng Việt
Биз веб-сайт ишлаши, таҳлил қилиш ва персоналлаштириш учун кукидан фойдаланамиз. Маълумотларни қайта ишлаш Махфийлик сиёсатига мувофиқ амалга оширилади.
ҳаммасини қабул қилиш мослаштириш рад этиш