Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> uzupełnienie brakujących kodów pocztowych
mkarach
post 30.12.2011, 10:38:36
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 20.01.2009

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


Witam,

Potrzebuje pomocy. mam tabelę o nazwie adres w której mam dane teleadresowe klientów( kolumny: imie, nazwisko, miejscowosc,ulica, rokurodzenia, kodpocztowy)
Mam dla Gdańska przypisane różne kody pocztowe dla klientów wg ulic wg danych z poczty polskiej.
Problem w tym ze jeden rokurodzenia='1978' nie ma przypisanych kodów pocztowych.

Chciałbym przypisać rocznikowi 1978 kodpocztowe z pozostałych roczników ale z dopasowaniem do ulic.

Rekordy obecnie wygladają tak:
Jan Nowak, Gdańsk, Grunwaldzka ,1967,80-170
Janina Nowak, Gdańsk, Grunwaldzka,1978, 00-00
Sylwia Kowalska, Gdańsk, Ślepa ,1947,80-169
Karola Nowaczyk, Gdańsk, Ślepa,1978, 00-00

a powinny tak:
Jan Nowak, Gdańsk, Grunwaldzka ,1967,80-170
Janina Nowak, Gdańsk, Grunwaldzka,1978, 80-170
Sylwia Kowalska, Gdańsk, Ślepa ,1947,80-169
Karola Nowaczyk, Gdańsk, Ślepa,1978, 80-169

Ręcznie ciężko to zrobić ,bo to ponad 3 tyś rekordów.
jakiej funkcji uzyć, bo warunek sqla pewnie będzie taki?:

where miejscowosc='Gdańsk' and kodpocztowy='00-000' and rokurodzenia='1978'

z góry dzięki za pomoc.

Go to the top of the page
+Quote Post
erix
post 30.12.2011, 11:22:02
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




A ciężko przetestować...?


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
thek
post 30.12.2011, 11:33:33
Post #3





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Nie testowałem w Postgresie, ale MySQL pozwala w UPDATE JOINować do tabeli modyfikowanej, ale jeśli to ta sama to chyba i tak by zablokowało z tego co kojarzę... Tutaj musiałbyś przy SET kodpocztowy ustawić kodpocztowy wybierany SELECTem zgodnym z ulicą i miastem rekordu zmienianego, ale różnym kodem od 00-000 i stąd własnie wygodne byłoby złączenie JOINem obu: zmienianej i przeszukiwanej. Niestety nie używałem Postgressa więc nie wiem czy on takie złączenie wspiera a jeśli tak, to czy zezwalana taki UPDATE :/


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
mkarach
post 30.12.2011, 12:46:36
Post #4





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 20.01.2009

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


kombinowałem update set, insert into, nawet poprzez copy do tabeli tempowej ale nic nie pomogło.
Nie mam zielonego pojęcia.
Go to the top of the page
+Quote Post
mortus
post 30.12.2011, 14:41:55
Post #5





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Zwykły UPDATE + SELECT:
  1. UPDATE adres
  2. SET kodpocztowy = (
  3. SELECT kodpocztowy
  4. FROM adres a1
  5. WHERE a1.miejscowosc = adres.miejscowosc AND a1.ulica = adres.ulica AND a1.rokurodzenia <> 1978 AND kodpocztowy <> '00-000'
  6. LIMIT 1
  7. )
  8. WHERE adres.kodpocztowy = '00-000'

Tylko nie jestem pewien, czy te puste wartości kodu pocztowego, to u Ciebie 00-000, czy 00-00.
Oczywiście to przy założeniu, że w Gdańsku nie ma dwóch ulic o takiej samej nazwie (bo z tym się spotkałem).
Go to the top of the page
+Quote Post
mkarach
post 1.01.2012, 22:55:04
Post #6





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 20.01.2009

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


Cytat(mortus @ 30.12.2011, 14:41:55 ) *
Zwykły UPDATE + SELECT:
  1. UPDATE adres
  2. SET kodpocztowy = (
  3. SELECT kodpocztowy
  4. FROM adres a1
  5. WHERE a1.miejscowosc = adres.miejscowosc AND a1.ulica = adres.ulica AND a1.rokurodzenia <> 1978 AND kodpocztowy <> '00-000'
  6. LIMIT 1
  7. )
  8. WHERE adres.kodpocztowy = '00-000'

Tylko nie jestem pewien, czy te puste wartości kodu pocztowego, to u Ciebie 00-000, czy 00-00.
Oczywiście to przy założeniu, że w Gdańsku nie ma dwóch ulic o takiej samej nazwie (bo z tym się spotkałem).


Wygląda to całkiem nieźle.
Zabraklo "as" w from adres a1
i w warunku WHERE adres.kodpocztowy = '00-000' powinno byc jeszcze adres.miejscowosc='Gdańsk'

Gdy uruchamiam to query to dostaje komunikat z błędem :
BŁĄD: pusta wartość w kolumnie "kodpocztowy" narusza ograniczenie wymaganej wartości
Go to the top of the page
+Quote Post
mortus
post 1.01.2012, 23:48:32
Post #7





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


AS nie jest wymagane (a1 automatycznie staje się aliasem), warunku w klauzuli WHERE rzeczywiście zabrakło.

Komunikat błędu sugeruje, że któraś z ulic w ogóle nie ma nadanego właściwego kodu pocztowego. Pobieramy zatem wartość NULL, której użyć nie możemy ze względu na ograniczenia wprowadzone na kolumnę kodpocztowy. Sprawdź to.

Ten post edytował mortus 1.01.2012, 23:50:10
Go to the top of the page
+Quote Post
mkarach
post 2.01.2012, 09:29:34
Post #8





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 20.01.2009

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


Cytat(mortus @ 1.01.2012, 23:48:32 ) *
AS nie jest wymagane (a1 automatycznie staje się aliasem), warunku w klauzuli WHERE rzeczywiście zabrakło.

Komunikat błędu sugeruje, że któraś z ulic w ogóle nie ma nadanego właściwego kodu pocztowego. Pobieramy zatem wartość NULL, której użyć nie możemy ze względu na ograniczenia wprowadzone na kolumnę kodpocztowy. Sprawdź to.


Bingo. W PGAdminei wyłaczyłem opcje dla kolumny kodpocztowy NIE NULL i zadzialało. Okazało się ze przy 3 ulicach na 3 tysiące rekordów nie mógł dopasować gdyż w nazwie ulicy Gen. Hallera nie było kropki po Gen.

dzięki za pomoc.
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: 26.04.2024 - 05:52