Avatar billede jenzb Nybegynder
14. januar 2001 - 21:05 Der er 7 kommentarer og
1 løsning

Hvordan gemmer man nemt vedr. auto_increment

Jeg har gang i en database hvor der er et id-felt der er sat som auto_increment.
Da jeg gerne vil vide hvilken værdi den er kommet til, inden jeg indsætter værdien, skal jeg bruge en måde at gemme outputtet fra \"select last_insert_id()\".
Så vidt jeg har forstået det slettes last_insert_id, ihvertfald når jeg forlader databasen.
Derfor vil jeg gerne gemme værdien i en tabel.
Hvordan vil man nemmest kunne gøre det?
Kan man lave noget flettet halløj, ligesom:
insert into ids (last_id) values(Select last_insert_id());
Avatar billede elk Nybegynder
14. januar 2001 - 21:20 #1
\"lock tables TABELNAVN write\"

\"select max(id) from TABELNAVN\"

gør hvad du nu skal gøre med det id du får i selectsætningen....husk at lægge 1 til tallet for at få det du får ved insert

\"DIn sql sætning\"

\"unlock tables\"
Avatar billede halnet Nybegynder
14. januar 2001 - 21:21 #2
Kan du ikke bruge:
SELECT max(id) FROM tabel

- Anders
Avatar billede elk Nybegynder
14. januar 2001 - 21:23 #3
bruger han det uden at låse kan han ikke være sikker på at det er det rigtige id ;)
Avatar billede halnet Nybegynder
14. januar 2001 - 21:28 #4
SELECT id FROM tabel ORDER BY id DESC LIMIT 0,1
MEN... det er det højeste id - ikke nødvendigvis det sidste!!

- Anders
Avatar billede jenzb Nybegynder
14. januar 2001 - 21:35 #5
Tak for de hurtige svar.
Jeg tror ikke helt at det er det jeg leder efter.
Hvis jeg har en database med følgende indhold:
mysql> select * from test;
+----+---------------------+
| id | tekst              |
+----+---------------------+
|  1 | Dette er den første |
|  2 | Dette er den anden  |
|  3 | Dette er den tredje |
| 95 | Dette er en anden  |
+----+---------------------+

Her er de første 3 indsat vha:
insert into test values (NULL, \'tekst\');

men den sidste er indsat vha:
insert into test values (95, \'tekst\');

her vil \"select max(id) from test\" give værdien 95, mens \"select last_insert_id()\" giver 3.

Da jeg skal bruge det i et php-script, hvor den jo for hver sideeksponering laves en ny forbindelse til databasen, har jeg brug for en metode til at gemme last_insert_id() værdien i en anden tabel.

- Jens
Avatar billede erikjacobsen Ekspert
14. januar 2001 - 21:36 #6
Nej intet af dette, det koster alt for meget. Har du indsat med INSERT vil et
eventuelt autoinc-nummer kunne aflæses direkte i næste sætning således

  mysql_query(\"INSERT INTO...\");
  $id = mysql_insert_id();
Avatar billede jenzb Nybegynder
15. januar 2001 - 08:11 #7
Jeg leder mere efter en ren SQL-måde at \"pipe\" resultatet fra select last_insert_id() over i en update kommando.
erikjacobsen >> Jeg lader spørgsmålet stå åbent i et par dage. Hvis der ikke er andre svar er pointene dine.
Avatar billede erikjacobsen Ekspert
15. januar 2001 - 11:18 #8
ok - det var jo en variant, jeg ikke havde set ;)

Kan du ikke

  insert into ...
  insert into temp (c) values (last_insert_id())
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester