Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> buforowanie id
DeyV
post
Post #1





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




By dodać nowy wiersz (produkt) do bazy, przed procesem wprowadzania danych, muszę pobrać numer id, który dany rekord otrzyma.
Pobieram go prostym zapytaniem MAX (id) +1. Później juz tylko przesyłam ten numer, aż do momentu dodania nowego produktu.
Rozwiazanie takie ma jednak wadę - możliwe jest, że w trakcie gdy jeden użytkownik wprowadza dane, inny rozpocznie ten samą czynność i otrzyma ten sam numer id. Stąd pojawia sie konieczność wprowadzenia mechanizmu rezerwowania numerów, czyli oznaczania, które numery id są właśnie wykorzystywane.
Zrobiłem to na zasadzie osobnej tablicy, zawierającej kolumny [i]id_wprowadzanego_produktu i data [i]
Jednak mam problem. Nie wiem jak pobrać numer wiersza, dla którego nie istnieje jeszcze produkt i który nie jest zarezerwowany, lub rezerwacja jest "przestarzała"
A może macie jakieś inne rozwiazania?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
dragossani
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 398
Pomógł: 0
Dołączył: --
Skąd: Poznań

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


Pamiętaj, że wynik zapytania SELECT MAX(id)+1 FROM tabela nie daje odpowiedzi na pytanie jaki będzie następny wstawiony do tej tabeli identyfikator. Niekoniecznie będzie to wynik tego zapytania. Ciąg wstawianych identyfikatorów jest nieustannie rosnący. Identyfikatory usuniętych rekordów nie są ponownie używane.

Aby nie generować pustych rekordów w tabeli docelowej możesz stworzyć sobie tabelę o jednym rekordzie, służącą wyłącznie generowaniu kolejnego identyfikatora. Czyli na początek:
Kod
CREATE TABLE identyfikatory (id INT UNSIGNED NOT NULL)

INSERT INTO identyfikatory VALUES(0)
a potem jak potrzebujesz identyfikator to:
Kod
UPDATE identyfikatory SET id=LAST_INSERT_ID(id+1)

SELECT id FROM identyfikatory
Ten identyfikator tworzysz przed samym zapisem danych i wrzucasz go ręcznie jako klucz główny nowo tworzonego rekordu w tabeli z produktami.
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: 5.10.2025 - 02:44