[MySQL] Metoda wstawiania INSERT

0

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.

0

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ł.

0

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ć

0

Dzieki znalazłem rozwiązanie na moje pytanie

0

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?

0

A może
Select max(id) + 1 as noweid from tabela

Zakladając że interwał to 1

0

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

0
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.

0

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);
0
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...

0

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1