Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> uzupełnienie brakujących kodów pocztowych
mkarach
post
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
 
Start new topic
Odpowiedzi (1 - 7)
erix
post
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ć...?
Go to the top of the page
+Quote Post
thek
post
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 :/
Go to the top of the page
+Quote Post
mkarach
post
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
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
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
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
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
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 26.09.2025 - 05:07