Kom ihåg mig?
Home Menu

Menu


Få reda på nästa id

Ämnesverktyg Visningsalternativ
Oläst 2007-10-22, 15:15 #1
HenSod HenSod är inte uppkopplad
Flitig postare
 
Reg.datum: May 2005
Inlägg: 484
HenSod HenSod är inte uppkopplad
Flitig postare
 
Reg.datum: May 2005
Inlägg: 484
Låt säga att jag har ett fält som heter ID i en tabell i en MySql-databas. ID är av typen int och har tilldelats auto_increment. Hur kan jag göra för att ta reda på nästa tal som auto_increment genererar om jag inte har några rader i den databastabellen redan? Det är inte säkert att auto_increment börjar räkna från 0 så det är inte säkert att första raden i tabellen tilldels 1 i fältet ID.

[EDIT]
Programmeringsspråket jag använder mig av är PHP.
HenSod är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-10-22, 15:47 #2
mbomelin mbomelin är inte uppkopplad
Medlem
 
Reg.datum: Feb 2004
Inlägg: 248
mbomelin mbomelin är inte uppkopplad
Medlem
 
Reg.datum: Feb 2004
Inlägg: 248
$result = mysql_query("SHOW TABLE STATUS like 'tabellnamn'");
$row = mysql_fetch_assoc($result);

echo "Nästa värde = " . $row['Auto_increment'];
mbomelin är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-10-22, 16:23 #3
HenSod HenSod är inte uppkopplad
Flitig postare
 
Reg.datum: May 2005
Inlägg: 484
HenSod HenSod är inte uppkopplad
Flitig postare
 
Reg.datum: May 2005
Inlägg: 484
Tack för det!
HenSod är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-10-22, 21:30 #4
hnn hnn är inte uppkopplad
Banned
 
Reg.datum: Mar 2004
Inlägg: 2 587
hnn hnn är inte uppkopplad
Banned
 
Reg.datum: Mar 2004
Inlägg: 2 587
Du bör inte lita på det. Eftersom MySQL stödjer flera anslutningar, så kan någon annan ta IDt..
hnn är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-10-22, 22:37 #5
weirdbyte weirdbyte är inte uppkopplad
Medlem
 
Reg.datum: Aug 2007
Inlägg: 165
weirdbyte weirdbyte är inte uppkopplad
Medlem
 
Reg.datum: Aug 2007
Inlägg: 165
Du kan även använda dig av http://se2.php.net/mysql_insert_id för att ta reda på nästa id, om du lika gärna ha skickat in nånting.
weirdbyte är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-10-22, 22:54 #6
SimonPs avatar
SimonP SimonP är inte uppkopplad
Mycket flitig postare
 
Reg.datum: May 2006
Inlägg: 832
SimonP SimonP är inte uppkopplad
Mycket flitig postare
SimonPs avatar
 
Reg.datum: May 2006
Inlägg: 832
mysql_query("LOCK TABLES mintabell WRITE") or die("error");
$result = mysql_query("SELECT MAX(ID) AS LAST_ID FROM mintabell") or die("error");
$result = mysql_fetch_array($result);
echo "Last id = " . $result[LAST_ID];
mysql_query("UNLOCK TABLES");

Ovanstånde ska vara säkert.
SimonP är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-10-22, 23:20 #7
T00b T00b är inte uppkopplad
Nykomling
 
Reg.datum: Jun 2007
Inlägg: 8
T00b T00b är inte uppkopplad
Nykomling
 
Reg.datum: Jun 2007
Inlägg: 8
Var med på att SimonP's metod inte klarar ut att hämta ID't om tabellen är tom. Men byta ut "SELECT MAX(ID) AS LAST_ID FROM mintabell" mot "SHOW TABLE STATUS like 'mintabell'" som mbomelin föreslog innan borde lösa det hela.
T00b är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-10-24, 14:25 #8
mbomelin mbomelin är inte uppkopplad
Medlem
 
Reg.datum: Feb 2004
Inlägg: 248
mbomelin mbomelin är inte uppkopplad
Medlem
 
Reg.datum: Feb 2004
Inlägg: 248
Max(ID) stämmer inte alltid då man faktiskt kan ställa auto_increment-sekvensen till vilket nummer som helst. Låt säg att max(ID) = 12, men du har ställt in auto_increment för tabellen att fortsätta på 1000.

mysql_insert_id() sätts ju bara om du kör en update, delete eller insert mot tabellen så det känns onödigt i detta fallet.

Sen är ju frågan varför man vill veta det innan man stoppar in nåt i tabellen?
Stoppa in din data, ta reda på vilket id raden fått med hjälp av mysql_insert_id() och använd sen värdet till vad det nu är du gör i ditt script. Det är mitt absoluta tips.
mbomelin är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-10-24, 14:38 #9
HenSod HenSod är inte uppkopplad
Flitig postare
 
Reg.datum: May 2005
Inlägg: 484
HenSod HenSod är inte uppkopplad
Flitig postare
 
Reg.datum: May 2005
Inlägg: 484
Jo, att stoppa in datan och ta reda på id:t efter med mysql_insert_id är ju det absolut bästa, men just i detta specifika läget så ska nästa id presenteras innan datan har lagts i databasen. Dock får man veta det "rätta" id:t när datan har lagts i databasen.
HenSod är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-10-24, 22:01 #10
mbomelin mbomelin är inte uppkopplad
Medlem
 
Reg.datum: Feb 2004
Inlägg: 248
mbomelin mbomelin är inte uppkopplad
Medlem
 
Reg.datum: Feb 2004
Inlägg: 248
Tänk på att det id du visar inte säkert blir nästa id om det är ett multiuser-system.
Fler akan vara påloggade samtidigt och få samma information, om den ena gör en action som stoppar in nåt nytt i tabellen så stämmer inte infon som visas för den andra usern.
mbomelin är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 09:56.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017