⊗ppPmDOLVT 384 of 447 menu

Lidhja përmes tabelës së lidhjes në PHP

Le të supozojmë tani që përdoruesi ka qenë në qytete të ndryshme. Në këtë rast, tabela me përdoruesit mund të kishte pamjen e mëposhtme:

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

Është e qartë se të ruash të dhëna në këtë mënyrë nuk është e saktë - qytetet duhet të nxirren në një tabelë të veçantë. Ja ku është ajo:

cities
id name
1 city1
2 city2
3 city3

Sidoqoftë, ne duhet të bëjmë që çdo përdorues të mund t'i referohet disa qyteteve. Kjo nuk mund të bëhet duke përdorur dy tabela.

Do të na duhet të prezantojmë të ashtuquajturën tabelë të lidhjes, e cila do të lidhë përdoruesin me qytetet e tij.

Në çdo regjistrim të kësaj tabele do të ruhet lidhja midis një përdoruesi dhe një qyteti. Në të njëjtën kohë për një përdorues në këtë tabelë do të ketë aq regjistrime sa qytete ka qenë.

Ja tabela jonë e lidhjes:

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

Tabela me përdoruesit do të ruajë vetëm emrat e përdoruesve, pa lidhje:

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

Kërkesat

Le të bëjmë një kërkesë me të cilën do të nxjerrim përdoruesit së bashku me qytetet e tyre. Për këtë do të na duhen të bëjmë dy join: join-i i parë do t'i bashkëngjijë përdoruesve tabelën e lidhjes, dhe join-i i dytë përmes lidhjeve do t'i bashkëngjijë qytetet:

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

Rezultati i kërkesës

Rezultati i kërkesës sonë në PHP do të përmbajë emrin e çdo përdoruesi aq herë, me sa qytete është i lidhur:

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

Do të ishte më e përshtatshme të konvertohej një grup i tillë dhe ta shndërronim atë në vijim:

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

Le të shkruajmë kodin që kryen një konvertim të tillë:

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

Detyra praktike

Le të supozojmë që një produkt mund t'i përkasë disa kategori. Përshkruani strukturën e ruajtjes.

Shkruani një kërkesë që do të nxjerrë produktet së bashku me kategoritë e tyre.

Shfaqni të dhënat e marra në formën e një liste ul në mënyrë që në çdo li në fillim të jetë emri i produktit, dhe pas dy pikëve përmes presje të listohen kategoritë e këtij produkti. Përafërsisht kështu:

<ul> <li>product1: category1, category2, category3</li> <li>product2: category1, category3</li> <li>product3: category1</li> </ul>
Shqip
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ne përdorim cookie për funksionimin e sajtit, analizën dhe personalizimin. Përpunimi i të dhënave bëhet në përputhje me Politikën e Privatësisë.
prano të gjitha konfiguro refuzo