• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

wybór województwa, powiatu, miejscowości relacyjna baza danych

Object Storage Arubacloud
0 głosów
377 wizyt
pytanie zadane 1 lipca 2017 w SQL, bazy danych przez Jacapno Nowicjusz (140 p.)
Piszę witrynę z ogłoszeniami, na której użytkownik będzie mógł dodać ogłoszenie wybierając obszar na którym będzie wyświetlane.

np. pan Janek z Poznania potrzebuje położyć płytki w korytarzu swojego domu, i tutaj akurat sprawa jest prosta bo wybierze tylko jedno województwo, jeden powiat i jedną miejscowość co łatwo zapisać dodając do tabeli "ogłoszenia" (w której będzie przechowywane między innymi id ogłoszenia i treść) 3 kolumny "województwo","powiat","miejscowość"

problem pojawia się gdy ogłoszenie dodaje np. pan Piotr z Radomia, oferujący swoje usługi hydrauliczne, który chce aby jego ogłoszenie wyświetlało się w 3 powiatach województwa mazowieckiego 2 powiatach łódzkiego i może jeszcze w 1 powiecie z województwa świętokrzyskiego, bo boi się że jego golf z 93 nie pojedzie dalej niż 50km.;)

jak to teraz zapisać do bazy danych aby jak najsprawniej działała wyszukiwarka gdy ktoś w nią wpisze np. "glazura" i "powiat skierniewicki"?

Co prawda mam kilka pomysłów ale żaden nie jest idealny.

-pierwszy to taki żeby zapisywać wszystko tak jak w przykładzie 1 rozdzielając wartości znakiem specjalnym np.& ale w tedy skrypt musiał by wyciągać każdy rekord z tabeli "ogłoszenia" rozdzielać go i sprawdzać czy szukana kwestia istnieje co pewnie potrwa wieki jeżeli ilość rekordów będzie duża.

-drugi to zrobić oddzielną bazę a w niej tabele dla każdego powiatu i w pojedynczym rekordzie zapisywać tylko id ogłoszenia, ale to wiąże się z utworzeniem 380 tabel co też nie wydaje się dobrym pomysłem

2 odpowiedzi

0 głosów
odpowiedź 26 sierpnia 2018 przez Darek_ppp Początkujący (400 p.)

Nie jestem ekspertem ale ja bym zrobił tak:

Tabele:

Fachowcy (id, nazwa, ....)

Wojewodztwa (id, nazwa_wojewodztwa)

Powiaty (id, Województwa._id, nazwa_powiatu)

Miejscowosci (id, Powiaty_id, nazwa_miejscowosc)

Wybrane_regiony (id, Fachowcy_id, Województwa_id, Powiaty_id, Miejscowosci_id)

 

Jeżeli Fachowiec wybiera więcej niż jedno miasto, województwo lub powiat to będzie miał przypisane tyle rekordów co największą ilość miejsc.

Jak chcesz wypisać powiaty dla Fachowca o id=1 to:

SELECT Powiaty.nazwa_powiatu FROM Powiaty, Wybrane_regiony WHERE Wybrane_regiony.Powiaty_id=Powiaty.id AND Fachowcy.id=1

 

0 głosów
odpowiedź 27 sierpnia 2018 przez Ignobiles Obywatel (1,800 p.)

Jeśli chodzi o podział regionów to możesz to zrobić na zasadzie drzewa.Jedna kolumna z regionami.

Regiony (id,name,type,path)

Do tego tabele:

Fachowcy(id,name)

FachowcyWRegionie (id, FachowiecId,RegionId)

Path oznacza ścieżkę składająca się z identyfikatorów regionów.Np dla miejscowości która znajduje się w powiacie krakowskim i województwie małopolskim będzie to 'id województwa/id powiatu/id miejscowosci'.

Teraz wyobraźmy sobie sytuacje że fachowiec dodał usługę w rejonie powiatu krakowskiego.Dodajesz tylko jeden rekord do tabeli FachowcyWRegionie z identyfikatorem powiatu krakowskiego.Następnie gdy użytkownik wpisuje w wyszukiwarkę miejscowość z powiatu krakowskiego.To robisz tak.

SELECT Fachowcy.id,Fachowcy.name FROM Fachowcy LEFT JOIN FachowcyWRegionie on Fachowcy.id = FachowcyWRegionie.idFachowiec LEFT JOIN Regiony ON FachowcyWRegionie.idRegion=Regiony.id WHERE Regiony.path LIKE 'path miejscowosci' OR Regiony.path LIKE 'path powiatu nadrzednego wobec miejscowosci' OR Regiony.path LIKE 'path wojewodztwa nadrzednego wobec miejscowosci' GROUP BY Fachowcy.id 

Bo logiczne jest że jeśli fachowiec działa w obrębie powiatu krakowskiego, to działa też w miejscowości należącej do tego powiatu.

W przypadku path nadrzędnego wobec miejscowości skracasz po prostu scieżkę path o dana ilość znaków.

Już późno więc nie wiem czy dobrze to wytłumaczyłem.Pytaj jakby coś.

 

 

Podobne pytania

0 głosów
1 odpowiedź 137 wizyt
pytanie zadane 2 czerwca 2016 w SQL, bazy danych przez hiper007 Stary wyjadacz (11,270 p.)
0 głosów
1 odpowiedź 148 wizyt
pytanie zadane 16 lutego 2019 w PHP przez aleksander_szut Użytkownik (940 p.)
0 głosów
1 odpowiedź 327 wizyt
pytanie zadane 26 sierpnia 2018 w SQL, bazy danych przez Darek_ppp Początkujący (400 p.)

92,634 zapytań

141,505 odpowiedzi

319,886 komentarzy

62,015 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...