Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> nextval() dla kazdego uzytkownika osobno
Helios
post
Post #1





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 8.07.2006

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


Witam

Tworze pewna baze danych z tabela przechowujaca uzytkownikow oraz uslugi, ktore ci uzytkownicy beda posiadac. Problem jest w tym, ze tych uslug bedzie wiele, tysiace dla kazdego uzytkownika, ktory bedzie je sobie mogl dodawac i usuwac.

Chce, aby uzytkownikowi numeracja uslug leciala od poczatku np. usluga#1, usluga#2 a nie jak w przypadku nextval() usluga#2831381.

Napisalem prosta funkcje w plpgsql:

  1. CREATE OR REPLACE FUNCTION nextdbid(users_id integer)
  2. RETURNS integer AS $BODY$
  3. DECLARE
  4. last_id integer;
  5. BEGIN SELECT db.id INTO last_id FROM db WHERE db.users_id=users_id ORDER BY id DESC LIMIT 1 ;
  6. IF NOT FOUND THEN
  7. RETURN 1;
  8. END IF;
  9. RETURN last_id+1;
  10. END;
  11. $BODY$
  12. LANGUAGE 'plpgsql' VOLATILE
  13. COST 100;
  14. ALTER FUNCTION nextdbid(integer) OWNER TO "admin";


i teoretycznie dziala, jednak przy dodawaniu rekordu musze wklepywac:

  1. INSERT INTO db VALUES (nextdbid(2), 2); -- itd.


rozumiem, ze nie da sie zrobic czegos w stylu:

  1. CREATE TABLE db (
  2. id INTEGER NOT NULL DEFAULT (nextdbid(users_id)),
  3. -- itd.
  4. );


(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

Oprocz tego funkcja ta nie dziala dokladnie tak samo jak nextval gdyz podaje wartosc ostatniego id powiekszona o jeden, nie uwzgledniajac czy uzytkownik mial juz jakies uslugi i je wykasowal (po zwolnieniu sie identyfikatorow nie powinny one byc brane pod uwage).

Czy ktos ma jakies lepsze rozwiazanie tego problemu?

Pozdrawiam
Go to the top of the page
+Quote Post

Posty w temacie


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: 23.12.2025 - 13:43