⊗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

Сұраныстар

Пайдаланушыларды олардың қалаларымен бірге алатын сұраныс жасайық. Ол үшін бізге екі қосылу керек болады: бірінші қосылу пайдаланушыларға байланыс кестесін қосады, ал екінші қосылу байланыстар арқылы қалаларды қосады:

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çeЎзбекOʻzbekTiếng Việt
Біз сайттың жұмысы, аналитика және персонализация үшін cookie файлдарын қолданамыз. Деректерді өңдеу Құпиялылық саясаты бойынша жүреді.
барлығын қабылдау баптау қабылдамау