Witam wszystkich.
Mam pytanie, czy isntieje jakaś funkcja metoda do wstawienia nowego rekordu do tabeli i równoczesne uzyskanie informacji o polu AUTo_INCREMENT a dokładniej jego wartości aktualnej.
Witam wszystkich.
Mam pytanie, czy isntieje jakaś funkcja metoda do wstawienia nowego rekordu do tabeli i równoczesne uzyskanie informacji o polu AUTo_INCREMENT a dokładniej jego wartości aktualnej.
istnieje. tylko mógłbyś sprecyzować o jaki język chodzi; zgaduję, że php: mysql_insert_id()
a następnym razem zerknij sobie na listing funkcji mysql_* - nie jest tego dużo, po kilkunastu minutach sam byś znalazł.
Nie precyzowałem jeszcze języka, ale skupiam się bardziej na Delphi muszę napisac aplikację do przyjmowania zleceń. I są dwie tabele klienci i zamoiwenia. I etap polega na wstawieniu informacji o nowym kliencie II etapo zgloszenie zamowienie wg. Numeru klienta. A chec zoptymalizawac zapytanie aby po wstawieniu nowego rekordu do tabeli otrzymac zarazem unikatowy numer, którym w innych tabelach można się posłużyć
Dzieki znalazłem rozwiązanie na moje pytanie
To ja się podłączę.
mysql_insert_id() zwraca id ostatnio dodanego rekordu - a co, jeśli ja potrzebuję ten id przed insertem?
Znalazłem odpowiednią funkcję w MySQL i zapytanie wygląda tak:
select last_insert_id() as id from tabela
jednak to zwraca mi dziwną rzecz - tyle jedynek ile jest rekordów :|
Więc jak można pobrać wartość autoincrement przed wywołaniem inserta?
A może
Select max(id) + 1 as noweid from tabela
Zakladając że interwał to 1
No właśnie takie coś nie ma racji bytu.
mam autoincrement = 3
cała akcja po to, że muszę uploadować 1 plik - musi on być unikatowy (jak nazwy nowych avatarów na 4p: nazwa = id usera) - dlatego chciałem prosto zapisywać plik pod nazwą id powiązanego rekordu
Marooned napisał(a)
No właśnie takie coś nie ma racji bytu.
mam autoincrement = 3
- dodaję rekord [id=3]
- autoincrement = 4
- kasuję rekord id=3
i teraz chcę dodać nowy rekord:- pobieram tak jak piszesz: maxem - otrzymuję 2 - więc uważam, że next id = 3 i takiej wartości używam
- rekord dodany [id=4] - zonk
cała akcja po to, że muszę uploadować 1 plik - musi on być unikatowy (jak nazwy nowych avatarów na 4p: nazwa = id usera) - dlatego chciałem prosto zapisywać plik pod nazwą id powiązanego rekordu
To się zgadza i masz zupełną rację, ponieważ baza nie wypełnia luk w numeracji.
Ale skoro do tego jest Ci to potrzebne, to może odwróć kolejność, najpierw dodaj wpis do bazy i pobierz ID wygenerowane przez nią, później zapisz uploadowany plik pod nazwą tego ID, jeśli próba zapisania się nie powiedzie to kasujesz rekord o tym ID.
z tym max'em to dziala, nie wiem czemu wam nie :P... ja taki mechanizm wykorzystalem piszac wlasne forum...
$result=mysql_query("SELECT MAX(*) FROM tabela",$conn); // gdzie $conn to identyfikator polaczenia z baza danych
$row=mysql_fetch_row($result);
$max=$row[0]+1;
mysql_query("INSERT INTO tabela VALUES($max,... inne wartości)",$conn);
jagi napisał(a)
z tym max'em to dziala, nie wiem czemu wam nie :P... ja taki mechanizm wykorzystalem piszac wlasne forum...
$result=mysql_query("SELECT MAX(*) FROM tabela",$conn); // gdzie $conn to identyfikator polaczenia z baza danych
$row=mysql_fetch_row($result);
$max=$row[0]+1;
mysql_query("INSERT INTO tabela VALUES($max,... inne wartości)",$conn);
To zadziała jak nie używasz autonumeru z bazydanych tylko sam je kontrolujesz, inaczej jak dwa posty wyżej dodajesz id = 4 potem je kasujesz to następne dodane będzie równe 5...
no dobra ale po co korzystac z autoincrement jesli mozna samemu to kontrolowac i to w bardzo prosty sposob... ale zapewne jest jakies zapytanie sql ktore moze zmieniac wartosc autoincrement, nalezaloby zajrzec do dokumentacji