![]() |
![]() |
![]()
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? |
|
|
![]() |
![]()
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) a potem jak potrzebujesz identyfikator to:INSERT INTO identyfikatory VALUES(0) Kod UPDATE identyfikatory SET id=LAST_INSERT_ID(id+1) Ten identyfikator tworzysz przed samym zapisem danych i wrzucasz go ręcznie jako klucz główny nowo tworzonego rekordu w tabeli z produktami.
SELECT id FROM identyfikatory |
|
|
![]() ![]() |
![]() |
Aktualny czas: 5.10.2025 - 02:44 |