⊗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): први спој ће прикључити табелу везе на кориснике, а други спој преко веза прикључиће градове:

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ščinaShqipSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Користимо колачиће за рад сајта, аналитику и персонализацију. Обрада података се врши у складу са Политиком приватности.
прихвати све подеси одбиј