Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> wyszukiwanie wg zakresu kodów pocztowych
Enigmatis
post 16.01.2008, 16:45:54
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 16.01.2008

Ostrzeżenie: (0%)
-----


Witam,

czy ktoś z tu obecnych rozwiązywał kiedyś problem wybierania rekordów z bazy wg zadanego zakresu kodów pocztowych?

problem:
jak wybrać kod 42-200 i odpowiadającego mu przedstawiciela jeśli w bazie istnieją zakresy kodów:

osoba zakres opis
przedstawiciel1 2-6 kody zaczynające się na 2 lub 6
przedstawiciel2 42-43 kody w zakresie 42000 do 43999
przedstawiciel3 42100-42299 dokładny zakres
przedstawiciel4 42210-42210 dokładny pojedyńczy kod (miejscowość)


jak widać z bazy powinni zostać wybrani przedstawiciele 1,2,3 przy czym 3 powinien znajdować się na pierwszym miejscu, jako najbardziej odpowiedni (najdokładniejszy wybór)

Ten post edytował Enigmatis 16.01.2008, 16:48:35
Go to the top of the page
+Quote Post
nitro18
post 16.01.2008, 17:00:15
Post #2





Grupa: Zarejestrowani
Postów: 311
Pomógł: 7
Dołączył: 2.08.2006
Skąd: Bystrzyca Kłodzka/Nysa

Ostrzeżenie: (10%)
X----


Nie... ale mam tak z kodami ze w bazie mam kody obok nich nazwy miejscowosci i przy pomocy ajax i PHP gdy wpisuję kod to pojawia się miejscowość. Fajna rzecz smile.gif
Go to the top of the page
+Quote Post
Kicok
post 16.01.2008, 17:37:01
Post #3





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

Ostrzeżenie: (0%)
-----


Jeśli zamiast przechowywać w bazie:
Cytat
przedstawiciel1 2-6 kody zaczynające się na 2 lub 6

będziesz przechowywał 20000, 69999 ( wszystkie liczby o tej samej ilości cyfr, dolna i górna granica zakresu w różnych kolumnach) to zapytanie będzie banalne:
  1. SELECT * FROM przedstawiciele WHERE ( zakres_od <= $kod_pocztowy ) AND ( zakres_do >= $kod_pocztowy ) ORDER BY ( zakres_do - zakres_od ) ASC


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
Enigmatis
post 17.01.2008, 09:37:48
Post #4





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 16.01.2008

Ostrzeżenie: (0%)
-----


niestety w bazie trzymane są właśnie takie krótkie "maski" (np. 2-6) i zmiana nie jest możliwa

jednak dzięki Twojej podpowiedzi Kicok wykombinowałem coś takiego:

SELECT
k.code_dol,
k.code_gora,
concat_ws(' ',a.agent_name,a.agent_surname ) as agent,
r.reg_name as region

FROM
d_docs_codes as k
INNER JOIN d_docs_regions as r ON( k.code_region = r.doc_id )
INNER JOIN d_docs_agents as a ON( k.code_przedstawiciel = a.doc_id )

WHERE ( rpad( k.code_dol,5,'0' ) <= 42100 ) AND ( rpad( k.code_gora,5,'9' ) >= 42100 )
ORDER BY ( rpad( k.code_gora,5,'9' ) - rpad( k.code_dol,5,'0' ) ) ASC

serdeczne dzięki za pomoc smile.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 30.04.2025 - 05:37