Posgresql + wyciaganie numeru zamowienia(pierwszego wolnego)
news.gazeta.pl - 20-03-2007 00:02
Posgresql + wyciaganie numeru zamowienia(pierwszego wolnego)
Witam Mam w bazie tabele ktora ma jedna kolumne z numerem zamowienia. W tym problem ze numery zamowienia mozna wpisac recznie wiec kazdy moze pisac jaki chce. Program dba o to zeby numer zamowienia sie nie powtorzyl.
Przy wprowadzaniu zamowienia takze ma podpowiadac numer zamowienia ktory ma byc pierwszym wolnym numerem w bazie(z kolumny numer_zamowienia).
Jak wyciagnac ostatni wolny to wiem bo to proste select max(numer_zamowienia)+1 i juz a jak wyciagnac pierwszy wolny ?
Np mamy w bazie takie numery zamowien:
1 2 5 6 7 13 44
i teraz jak wyciagac z bazy numer 3 ? (tzn wypisac jako sugerowany kolejny numer zamowienia) Baza to postgresql jezeli to cos pomoze.
hubert depesz lubaczewski - 20-03-2007 00:02
On 2007-03-19, news.gazeta.pl <pseudo@chello.pl> wrote: > Np mamy w bazie takie numery zamowien: > 1 > 2 > 5 > 6 > 7 > 13 > 44 > i teraz jak wyciagac z bazy numer 3 ? (tzn wypisac jako sugerowany kolejny > numer zamowienia) > Baza to postgresql jezeli to cos pomoze.
powiedz jeszcze która wersja i ile masz rekordów. bo jest kilka rozwiązań o różnych wydajnościach, ale najwydajniejsze wymaga rzeczy które są od niedawna.
depesz
-- quicksil1er: "postgres is excellent, but like any DB it requires a highly paid DBA. here's my CV!" :) http://www.depesz.com/ - blog dla ciebie (i moje CV)
news.gazeta.pl - 20-03-2007 00:02
> powiedz jeszcze która wersja i ile masz rekordów. > bo jest kilka rozwiązań o różnych wydajnościach, ale najwydajniejsze > wymaga rzeczy które są od niedawna.
PostgreSQL 8.0.11 rekordow ok 5 tys i powieksza sie o ok 20 dziennie
hubert depesz lubaczewski - 21-03-2007 00:04
On 2007-03-19, news.gazeta.pl <pseudo@chello.pl> wrote: >> powiedz jeszcze która wersja i ile masz rekordów. >> bo jest kilka rozwiÂązaĂą o róÂżnych wydajnoÂściach, ale najwydajniejsze >> wymaga rzeczy które sÂą od niedawna. > PostgreSQL 8.0.11 > rekordow ok 5 tys i powieksza sie o ok 20 dziennie
dla tylu rekordów to nie ma co kombinować.
select e.numer_zamowienia + 1 from zamowienia e left outer join zamowienia ne on e.numer_zamowienia + 1 = ne.numer_zamowienia where ne.numer_zamowienia is null order by e.numer_zamowienia asc limit 1;
powinno być ok.
depesz
-- quicksil1er: "postgres is excellent, but like any DB it requires a highly paid DBA. here's my CV!" :) http://www.depesz.com/ - blog dla ciebie (i moje CV)
kuczek@kuczek.pl - 21-03-2007 00:04
hubert depesz lubaczewski napisał(a): > select > e.numer_zamowienia + 1 > from > zamowienia e left outer join zamowienia ne on e.numer_zamowienia + 1 > = ne.numer_zamowienia > where > ne.numer_zamowienia is null > order by e.numer_zamowienia asc limit 1; > > powinno być ok. > > depesz
Nie, żebym się czepiał my Master, ale co by było gdybym się zawziął i podłączył z drugiego (trzeciego, n-tego) stanowiska ? Robimy save na raz,dwa, trzy, cztery i ..w pewnej niesprzyjającej sytuacji - duplicate key jak nic. Proponowałbym mimo wszystko update do nowszej wersji PostgreSQL i SELECT FOR UPDATE ... NOWAIT plus obsłużenie błędu. Dla mnie działa od ponad roku rewelacyjnie. Wcześniej oczywiście trzeba było kombinować z SELECT FOR UPDATE i obsłużeniem timeout ale po co odkrywać Amerykę od nowa ...
Pozdrawiam Rony
hubert depesz lubaczewski - 21-03-2007 00:04
On 2007-03-20, kuczek@kuczek.pl <kuczek@kuczek.pl> wrote: > Nie, żebym się czepiał my Master, ale co by było gdybym > się zawziął i podłączył z drugiego (trzeciego, n-tego) stanowiska ? > Robimy save na raz,dwa, trzy, cztery i ..w pewnej niesprzyjającej > sytuacji - duplicate key jak nic.
ależ oczywiście. ja tylko odpowiedziałem na pytanie jak znaleźć pierwszy wolny numer.
normlanie to osobę chcącą "odzyskiwać" numery należy odstrzelić i nauczyć korzystania z sekwencji ;-P
depesz
-- quicksil1er: "postgres is excellent, but like any DB it requires a highly paid DBA. here's my CV!" :) http://www.depesz.com/ - blog dla ciebie (i moje CV)
kuczek@kuczek.pl - 21-03-2007 00:04
hubert depesz lubaczewski napisał(a): > ależ oczywiście. > ja tylko odpowiedziałem na pytanie jak znaleźć pierwszy wolny numer. > > normlanie to osobę chcącą "odzyskiwać" numery należy odstrzelić i > nauczyć korzystania z sekwencji ;-P
No nie tłumaczmy sobie oczywistych oczywistości ;) Niestety, wyłóż to "ekspertom" z Ministerstwa Finansów. Żaden jełop nie rozumie, że UNIKALNY nie znaczy to samo co KOLEJNY. Ale co tam my biedni programiści... Chociaż Ustawa o Rachunkowości ... ale co tam, na "ekspertów" z TK nie poradzisz. Odstawiam SELECT FOR UPDATE.. NOWAIT , różne tam while i dzikie węże, na szczęście PostgreSQL daje radę nawet z naszym kochanym MF. No może z wyjątkiem ZUS bo tam nawet "extended" Oracle jest za cienki :D
Pozdrawiam, Master.
Rony
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[ms sql] =?ISO-8859-2?Q?wy=B6wietlenie_pierwszych_5_rekord?==?ISO-8859-2?Q?=F3w_z_zapytania_=3F_odpowiednik_ROWNUM_w_o?== ?ISO-8859-2?Q?raclu_dla_MS_SQL=27a?=
mysql, statystykl, jak wyciagnac dane rozkladu czasu ze wzgledu na okres pelnych godzin
[PGSQL] Pole "timestamp" a wyciagniecie tylko danych z danego roku.
[MySQL] Proste pytanie z wyciągnięciem czasu, a jednak mnie zagieło.
Jak wyciągnąć fragment grafiki (klatka, kilka sekund video) z pliku
Oracle - jak z liczby dni od roku 1900 wyciagnac date?
konkurs SQL Injection - 10 PLN na GSM dla pierwszej osoby, ktora dostanie sie do bazy
[oracle] jak wyciągnąć jeden znak ze stringa/zmiennej?
Zapytanie SQL o wyciagniecie danych z tej samej tabeli
wyciągnięcie danych z xls bez eksportu do cvs
zanotowane.pldoc.pisz.plpdf.pisz.plmorebeer.opx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|