Gå til innhold

hente ut siste id fra en tabell


Anbefalte innlegg

Videoannonse
Annonse
Arex1337 sin fungerer best, dette er det raskeste også.

 

Jaha? kan du gi en forklaring hvorfor det er best og raskest?

 

Trådstarter skrev

Jeg har en index i en mysql tabell med auto_increment, og skulle gjerne hentet ut det siste (høyeste) tallet som er tildelt.

 

Han ønsker altså å finne siste/høyeste id i tabellen. I hvilken sammenheng id skal brukes står det ingenting om.

 

mysql_insert_id fungerer kun om man nettopp har gjennomført en INSERT-spørring og at den spørringen genererer en AUTO_INCREMENT verdi.

mysql_insert_id fungerer også kun rett med forbindelsen som utførte forrige INSERT-spørringen, ellers vil den returnere feil verdi.

Ved feil returnerer mysql_insert_id 0 dersom forrige spørring ikke genererte en ny id, og FALSE dersom en forbindelse ikke finnes.

 

Eksempel tatt fra php.net

<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db('mydb');

mysql_query("INSERT INTO mytable (product) values ('kossu')");
printf("Last inserted record has id %d\n", mysql_insert_id());
?>

Altså er mysql_insert_id ubrukbar dersom han ønsker siste/høyeste id utenom en innsetting-situasjon som genererer inkrementasjon av den gitte id'en.

 

mysql_insert_id fungerer heller ikke på kolonner av typen BIGINT, så det beste ved innsetting i flere tabeller der id refererer til siste id i en annen tabell er å bruke LAST_INSERT_ID() i spørringen.

 

Enkelt eksempel (uten noen form for feilhåndtering).

<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db('mydb');

//Innsetting i første tabell
mysql_query("INSERT INTO tabell_1 (kolonne) values ('verdi')");

/* Innsetting i andre tabell der id fra første spørring legges inn med LAST_INSERT_ID() */
mysql_query("INSERT INTO tabell_2 (id, kolonne) values (LAST_INSERT_ID(), 'verdi')");

?>

Endret av Zandar
Lenke til kommentar
Arex1337 sin fungerer best, dette er det raskeste også.

 

Jaha? kan du gi en forklaring hvorfor det er best og raskest?

 

(..)

Selvfølgelig, denne funksjonen kobler seg kun inn mot en enkel rad i databasen imot en vanlig spørring som faktisk henter ut HELE tabellen. Enkelt og greit derfor.

 

Den er grei, men funksjonen fungerer ikke uten at man har satt inn data først...

LAST_INSERT_ID() henter heller ikke ut HELE tabellen.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...