⊗ppPmDOLVT 384 of 447 menu

Skakeling deur 'n skakeltafel in PHP

Kom ons sê nou 'n gebruiker was in verskillende stede. In hierdie geval kan die tabel met gebruikers die volgende voorkoms hê:

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

Dit is duidelik dat dit verkeerd is om data so te stoor - stede moet in 'n aparte tabel geplaas word. Hier is dit:

cities
id name
1 city1
2 city2
3 city3

Ons moet egter maak dat elke gebruiker na verskeie stede kan verwys. Met twee tabelle is dit onmoontlik.

Ons sal die sogenaamde skakeltafel moet invoer, wat die gebruiker met sy stede sal koppel.

In elke rekord van hierdie tabel sal 'n skakel tussen 'n gebruiker en een stad gestoor word. In hierdie geval sal daar vir een gebruiker soveel rekords in hierdie tabel wees as stede waarin hy was.

Hier is ons skakeltafel:

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

Die tabel met gebruikers sal slegs name van gebruikers stoor, sonder skakels:

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

Navrae

Kom ons maak 'n navraag waarmee ons gebruikers saam met hul stede sal uittrek. Vir dit sal ons twee joins moet doen: die eerste join sal die skakeltafel by die gebruikers voeg, en die tweede join sal deur die skakels die stede byvoeg:

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

Resultaat van die navraag

Die resultaat van ons navraag in PHP sal die naam van elke gebruiker bevat soveel keer as met hoeveel stede dit gekoppel is:

<?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'], ]; ?>

Dit sou makliker wees om so 'n array te omskep en dit in die volgende te verander:

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

Kom ons skryf kode wat so 'n omskakeling uitvoer:

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

Praktiese take

Kom ons sê 'n produk kan tot verskeie kategorieë behoort. Skryf die bergstruktuur uiteen.

Skryf 'n navraag wat produkte sal uithaal saam met hul kategorieë.

Vertoon die verkrygte data in die vorm van 'n lys ul sodat in elke li aanvanklik die produknaam staan, en na die dubbelpunt, geskei deur kommas, word die kategorieë van hierdie produk gelys. So ongeveer:

<ul> <li>product1: category1, category2, category3</li> <li>product2: category1, category3</li> <li>product3: category1</li> </ul>
Afrikaans
Azə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
Ons gebruik koekies vir die werking van die webwerf, ontleding en personalisering. Die verwerking van data geskied volgens die Privaatheidsbeleid.
aanvaar alles instel verwerp