Меҳварии пайвандкунӣ тавассути ҷадвали пайванд дар PHP
Ҳоло бигзор корбар дар шаҳрҳои гуногун буда бошад. Дар ин ҳолат ҷадвали корбарон метавонад соҳиби намуди зерин бошад:
| id | name | city |
|---|---|---|
| 1 | user1 | city1, city2, city3 |
| 2 | user2 | city1, city2 |
| 3 | user3 | city2, city3 |
| 4 | user4 | city1 |
Равшан аст, ки нигоҳ доштани маълумот ба ин тариҳ дуруст нест - шаҳрҳо бояд ба ҷадвали ҷудогона бароварда шаванд. Ин аст он:
| id | name |
|---|---|
| 1 | city1 |
| 2 | city2 |
| 3 | city3 |
Аммо, ба мо лозим аст, ки ҳар як корбар метавонад ба якчанд шаҳр дастрасӣ дошта бошад. Бо ёрии ду ҷадвал ин амал кардан имконнопазир аст.
Ба мо лозим меояд, ки чизе ба номи ҷадвали пайванд ворид кунем, ки корбарро бо шаҳрҳои он пайванд хоҳад кард.
Дар ҳар як сабти ин ҷадвал пайванди байни корбар ва як шаҳр нигоҳ дошта мешавад. Дар ин ҳолат барои як корбар дар ин ҷадвал он қадар сабт хоҳад буд, ки ӯ дар чанд шаҳр будааст.
Ин аст ҷадвали пайванди мо:
| 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 |
Ҷадвали корбарон танҳо номҳои корбаронро нигоҳ медоранд, бе пайвандҳо:
| 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>