⊗pyPmDOLVT 125 of 129 menu

Python-da baglanyşyk tablisasy arkaly baglanyşyk

Indi ulanyjynyň dürli şäherlerde bolandygyny göz öňüne getireýäli. Bu ýagdaýda ulanyjylar tablisasy aşakdaky görnüşde bolup biler:

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

Maglumatlary şeýle saklamak nädogrydygyny düşünmek kyn däl - şäherleri aýratyn tablisada saklamaly. Şu ýerde ol:

cities
id name
1 city1
2 city2
3 city3

Şonda-da, her bir ulanyjynyň birnäçe şähere salgylanýan bolşy ýaly etmeli. Iki tablisa bilen muny etmek mümkin däl.

Bizä söz ýüzi diýen baglanyşyk tablisasy zerur, ol ulanyjyny onuň şäherleri bilen baglar.

Bu tablisanyň her ýazgynda bir ulanyjynyň bir şäher bilen baglanyşygy saklanar. Şol bir wagtyň özünde bir ulanyjy üçin bu tablisada ol näçe şäherde bolsa, şonça ýazgy bolar.

Ine bizim baglanyşyk tablisamyz:

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

Ulanyjylar tablisasy diňe ulanyjylaryň adyny, baglanyşyklarsyz saklar:

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

Soraglar

Geliň, ulanyjylary şäherleri bilen bir hatarda çykarmak üçin sorag ýerine ýetireýäli. Bunuň üçin bizä iki birleşme (join) zerur: birinji birleşme ulanyjylara baglanyşyk tablisasyny goşar, ikinji birleşme bolsa baglanyşyklar arkaly şäherleri goşar:

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

Soragyň netijesi

Python-da soragymyzyň netijesi her bir ulanyjynyň adyny, ol näçe şäher bilen baglanyşykly bolsa, şonça gezek öz içine alar:

{'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'} {'user_name': 'user5', 'city_name': None}

Beýle sözlügi öwürmek we ony aşakdaky görnüşe getirmek has amatly bolar:

{ 'user1': ['city1', 'city2', 'city3'], 'user2': ['city1', 'city2'], 'user3': ['city2', 'city3'], 'user4': ['city1'], 'user5': [] }

Beýle öwürmäni amala aşyrýan kody ýazaýaly. Boş sözlük user_cities_dct döredeliň, ol ulanyjylar we olaryň bolan şäherleri hakda maglumatlary çalsyz goşup bolar. for aýlawynda iki üýtgeýji user_name we city_name yglan edeliň, olarda ulanyjynyň ady we şäheriň ady saklanar. Soňra şert ýazalyň - eger ulanyjy user_cities_dct içinde ýok bolsa, ol bu sözlüge açaryň görnüşinde goşular. Şeýle hem, city_name None däl bolsa, onuň açaryň bahasy hökmünde goşuljakdygyny görkezeliň:

result = cursor.fetchall() user_cities_dct = {} for row in result: user_name = row['user_name'] city_name = row['city_name'] if user_name not in user_cities_dct: user_cities_dct[user_name] = [] if city_name is not None: user_cities_dct[user_name].append(city_name) print(user_cities_dct)

Amaly wezipeler

Harydyň birnäçe kategoriýa degişli bolup biljekdigini göz öňüne getireýäli. Saklamanyň gurluşyny ýazyň.

Harytlary kategoriýalary bilen bir hatarda alyp gelýän soragy ýazyň.

Alynan maglumatlary ul sanawy görnüşinde çap ediň, şeýleki her bir li içinde ilki önümiň ady, soňra iki nokatdan soň, üsti bilen, şol önümiň kategoriýalary sanalyp geçilsin. Mysal üçin:

<ul> <li>product1: category1, category2, category3</li> <li>product2: category1, category3</li> <li>product3: category1</li> </ul>
Türkmen
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkçeЎзбекOʻzbekTiếng Việt
Biz sahypanyň işlemegi, analitika we şahsyýetleşdirmek üçin cookie ulanýarys. Maglumatlaryň işlenişi Gizlinlik syýasaty boýunça amala aşyrylýar.
hemmesini kabul et sazlamak ret et