Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Nietypowy indentyfikator
Forum PHP.pl > Forum > Bazy danych > PostgreSQL
kefi
Witam, mam zrobić tabelę której rekordy będą posiadały numer
indetyfikacyjny składający się z kodu pocztowego oraz doklejonej
koncówki która jest dla kazdego nowego rekordu z tym samym kodem
większa o 1

np.

12-000/0001 | wiesiek
12-000/0002 | heniek
13-123/0001 | czesław
12-000/0003 | marian

Ta wartość identyfkatora będzie pobierana z dwóch kolumn tej z kodem
oraz z koncówką, w jaki sposób nie robiąc tego po stronie skryptu moge
osiągnąć taki efekt ?

Próbowałem zagnieżdzić selecta w ten sposób co działa dobrze ale gdy
jest juz jakis rekord w bazie z takim kodem pocztowym bo jesli nie, to
wewnętrzny select zwraca mi null. MySQL posiada funkcje IF() albo
IFNULL() która rozwiązała by mi tu problem ale w dokumentacji jej nie
widze.

  1. INSERT INTO "ludzie" ("kod","nr","imie",) VALUES ('75-500',SELECT max
  2. ("nr")+1 AS n FROM "places" WHERE "kod" = '75-500' ,'czesław')


Probowałem castować nulla na integer ale nadal zwraca mi nulla,
próbowałem też napisać funkcje PL/SQL po to by dowiedzieć się ze
postgres na home.pl nie oferuje wsparcia dla funkcji PL/SQL a to by
było fajne bo mógł bym sobie to pole ustawiać triggerem i zapomnieć o
tym w skrypcie.
Z tego co widze to moge dodawać wyłącznie funkcje w samym SQL ale
przeglądając dokumentacje widze ze w takiej funkcji nie moge uzywac
ifów.

To jest moje pierwsze spotkanie z Postgresem więc prosze o
wyrozumiałość winksmiley.jpg
Wersja PgSQLa na home.pl to 8.2.9
wookieb
Do postgresa producent dolacza pgAdmina. Zainstaluj go sobie, bardzo przydatne narzędzie.

I tam zauważysz, że jak tworzysz np pole typu serial (mysqlowy auto_increment) to tak naprawde jest to pole typu integer z wartoscia domyslna.

U ciebie może być inaczej. Tworzysz funkcje która bedzie wyliczac kolejne id. Albo utworzyc triggera na INSERT ktorzy utworzy id dla nowego pola.
kefi
tylko serwer jest na home.pl i tam chyba nie mam dostępu do takich zabawek zeby sie zdalnie połączyć pgadminem, ale mam dostep do phppgadmina.

Patrze na te sekwencje i nadal nie wiem jak zrobic by dla nowego wpsisu nadawać dzięki temu koncówkę nr w zależności od kodu pocztowego.

Z tego co widze w phppgadminie to moge ustawic tak ze bedzie mi w kółko daną sekwencje powtarzał,

zawsze moge zorobić to w PHP ale sposób z selectem w insercie działa prawie dobrze gdyby nie ten null do którego nie moge dodać jedynki wszystko załatwiało by jedno zapytanie winksmiley.jpg

A funkcje do triggera mam zrobioną , tylko serwer nie ma obsługi PLSQL ;(
wookieb
Troche źle napisałem o tych sekwencjach. Użyj triggerów. Po prostu daj trigger na INSERT i tam już reszte można oprogramować.

HOME pozwala na połączenie z zewnątrz smile.gif Zainstaluj pgAdmina i spróbuj smile.gif

//EDIT Niemożliwe :/ myślałem, że to standard a co dopiero na HOME.
Może to ci pomoże. http://www.postgresql.org/docs/8.3/static/...er-example.html
kefi
juz mi sie wszystko udało zrobić przy pomocy triggerów a o obsługe pl/sql w home trzeba poprosić
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.