⊗ppPmDOLVT 384 of 447 menu

PHP-də əlaqə cədvəli vasitəsilə əlaqələndirmə

İndi istifadəçinin müxtəlif şəhərlərdə olduğunu tutaq. Bu halda istifadəçilər cədvəli aşağıdakı kimi ola bilər:

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

Aydındır ki, məlumatları belə saxlamaq düzgün deyil - şəhərlər ayrı bir cədvələ çıxarılmalıdır. Budur o:

cities
id name
1 city1
2 city2
3 city3

Lakin, biz elə etməliyik ki, hər bir istifadəçi bir neçə şəhərə istinad edə bilsin. İki cədvəldən istifadə etməklə bunu etmək mümkün deyil.

Bizim sözdə əlaqə cədvəli təqdim etməyimiz lazımdır, hansı ki, istifadəçini onun şəhərləri ilə əlaqələndirəcək.

Bu cədvəlin hər bir qeydində istifadəçi ilə bir şəhər arasında əlaqə saxlanılacaq. Eyni zamanda bir istifadəçi üçün bu cədvəldə onun olduğu şəhərlərin sayı qədər qeyd olacaq.

Budur bizim əlaqə cədvəlimiz:

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

İstifadəçilər cədvəli yalnız istifadəçi adlarını, əlaqələr olmadan saxlayacaq:

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

Sorğular

Gəlin sorğu edək, onun vasitəsilə istifadəçiləri onların şəhərləri ilə birlikdə çıxaraq. Bunun üçün bizə iki join lazımdır: ilk join istifadəçilərə əlaqə cədvəlini qoşacaq, ikinci join isə əlaqələr vasitəsilə şəhərləri qoşacaq:

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

Sorğunun nəticəsi

Bizim sorğumuzun PHP-dəki nəticəsi hər bir istifadəçinin adını onun əlaqəli olduğu şəhərlərin sayı qədər təkrarlayacaq:

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

Belə bir massivi çevirmək və onu aşağıdakına çevirmək daha rahat olardı:

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

Belə bir çevrilməni həyata keçirən kodu yazaq:

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

Praktiki tapşırıqlar

Tutaq ki, məhsul bir neçə kateqoriyaya aid ola bilər. Saxlama quruluşunu təsvir edin.

Məhsulları onların kateqoriyaları ilə birlikdə çıxaran sorğunu yazın.

Alınan məlumatları ul siyahısı şəklində çıxarın, elə ki, hər bir li-də əvvəlcə məhsulun adı, sonra isə iki nöqtədən sonra vergüllə ayrılmış şəkildə həmin məhsulun kateqoriyaları sadələşdirilsin. Təxminən belə:

<ul> <li>product1: category1, category2, category3</li> <li>product2: category1, category3</li> <li>product3: category1</li> </ul>
Azərbaycan
AfrikaansБългарскиবাংলাБеларускаяČ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
Biz saytin işi, analitika və fərdiləşdirmə üçün cookie istifadə edirik. Məlumatların emalı Məxfilik Siyasəti əsasında həyata keçirilir.
hamısını qəbul et konfiqurasiya et rədd et