WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Få reda på nästa id (https://www.wn.se/forum/showthread.php?t=24527)

HenSod 2007-10-22 15:15

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.

mbomelin 2007-10-22 15:47

$result = mysql_query("SHOW TABLE STATUS like 'tabellnamn'");
$row = mysql_fetch_assoc($result);

echo "Nästa värde = " . $row['Auto_increment'];

HenSod 2007-10-22 16:23

Tack för det!

hnn 2007-10-22 21:30

Du bör inte lita på det. Eftersom MySQL stödjer flera anslutningar, så kan någon annan ta IDt..

weirdbyte 2007-10-22 22:37

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.

SimonP 2007-10-22 22:54

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.

T00b 2007-10-22 23:20

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.

mbomelin 2007-10-24 14:25

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.

HenSod 2007-10-24 14:38

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.

mbomelin 2007-10-24 22:01

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.


Alla tider är GMT +2. Klockan är nu 07:58.

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