⊗ppPmDOLVT 384 of 447 menu

PHPda bog‘lanishlar jadvali orqali bog‘lanish

Endi foydalanuvchi turli shaharlarda bo‘lgan deylik. Bunday holda, foydalanuvchilar jadvali quyidagicha ko‘rinishi mumkin edi:

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

Ma'lumki, ma'lumotlarni shu tarzda saqlash noto‘g‘ri - shaharlarni alohida jadvalga chiqarish kerak. Mana u:

cities
id name
1 city1
2 city2
3 city3

Biroq, biz har bir foydalanuvchi bir nechta shaharga murojaat qilishi uchun qilishimiz kerak. Buni ikkita jadval yordamida amalga oshirib bo‘lmaydi.

Bizga bog‘lanishlar jadvali deb ataladigan narsani kiritish kerak bo‘ladi, u foydalanuvchini uning shaharlari bilan bog‘lab turadi.

Ushbu jadvalning har bir yozuvida foydalanuvchi va bitta shahar o‘rtasidagi bog‘lanish saqlanadi. Bunda, bitta foydalanuvchi uchun bu jadvalda u qancha shaharda bo‘lgan bo‘lsa, shuncha yozuv bo‘ladi.

Mana bizning bog‘lanishlar jadvalimiz:

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

Foydalanuvchilar jadvali faqat foydalanuvchilar ismlarini, bog‘lanishlarsiz saqlaydi:

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

So‘rovlar

Keling, foydalanuvchilarni ularning shaharlari bilan birga olib keladigan so‘rov yasaylik. Buning uchun bizga ikkita join kerak bo‘ladi: birinchi join foydalanuvchilarga bog‘lanishlar jadvalini qo‘shadi, ikkinchi join esa bog‘lanishlar orqali shaharlarni qo‘shadi:

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

So‘rov natijasi

PHPda bizning so‘rovimizning natijasi har bir foydalanuvchi nomini, u qancha shahar bilan bog‘langan bo‘lsa, shuncha marta o‘z ichiga oladi:

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

Bunday massivni konvertatsiya qilib, uni quyidagiga aylantirish qulayroq bo‘lardi:

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

Keling, bunday konvertatsiyani bajaradigan kodni yozamiz:

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

Amaliy vazifalar

Mahsulot bir nechta toifalarga tegishli bo‘lishi mumkin deylik. Saqlash tuzilishini yozib bering.

Mahsulotlarni ularning toifalari bilan birga olib keladigan so‘rovni yozing.

Olingan ma'lumotlarni ul ro‘yxati ko‘rinishida chiqaring, har bir lida avval mahsulot nomi, keyin ikki nuqtadan so‘ng vergul bilan ajratilgan holda o‘sha mahsulotning toifalari keltirilsin. Taxminan shunday:

<ul> <li>product1: category1, category2, category3</li> <li>product2: category1, category3</li> <li>product3: category1</li> </ul>
Oʻzbek
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекTiếng Việt
Biz sayt ishlashi, tahlil qilish va shaxsiylashtirish uchun cookie-fayllardan foydalanamiz. Ma'lumotlarni qayta ishlash Maxfiylik siyosatiga muvofiq amalga oshiriladi.
hammasini qabul qilish sozlash rad etish