⊗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šuMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ние користиме колачиња за работата на веб-страната, анализа и персонализација. Обработката на податоци се врши во согласност со Политиката за приватност.
прифати ги сите прилагоди одбиј