Avatar billede hkb-x Nybegynder
30. marts 2006 - 09:29 Der er 18 kommentarer og
1 løsning

forudsige id nummer

jeg får min db til automatisk at lave et unikt idnummer (med auto_increment) til hver række.

Men jeg vil gerne kunne forudsige hvad det næste id nummer bliver.

Der bliuver tit slettet i databsen så jeg kan ikke bare tage det sidste og så ligge en til... men er der ikke en måde hvorpå man kan få fat i det tal databasen bruger til at lave idnumrene med?
Avatar billede leif Seniormester
30. marts 2006 - 09:35 #1
Hvorfor kan du ikke tage det sidste og ligge 1 til ?

Men hvad skal du bruge det til ?

Når du har indsat i databasen kan du med mysql_insert_id() få det id der lige er sat ind.
Avatar billede hkb-x Nybegynder
30. marts 2006 - 09:37 #2
fordi der kan blive slettet nogle felter... og det kunne jo være det nyeste...
og så ville jeg jo kun få det næst nyeste...
Avatar billede fsconsult.dk Nybegynder
30. marts 2006 - 09:37 #3
hvis der kan være flere samtidige brugere, vil et sådant gæt ikke være særlig nøjagtig. iøvrigt bør der ikke lægges nogen form for logik på hvad id-feltet indeholder ...
Avatar billede hkb-x Nybegynder
30. marts 2006 - 09:38 #4
id feltet indeholder et tal der stiger med 1 hver gang jeg opretter et nyt felt..
Avatar billede leif Seniormester
30. marts 2006 - 09:48 #5
Ja, men hvis det er Auto_Increment, vil den altid ligge 1 til det højeste nummer selvom du sletter nr. 10 og er nået til 15
Avatar billede erikjacobsen Ekspert
30. marts 2006 - 09:51 #6
Du skal ikke - ja du *kan* ikke - gætte næste nummer. Sæt rækken ind, og aflæs med LAST_INSERT_ID() funktionen:

If INSERT inserts a row into a table that has an AUTO_INCREMENT column, you can find the value used for that column by using the SQL LAST_INSERT_ID() function.

(fra http://dev.mysql.com/doc/refman/5.1/en/insert.html )  Eller nemmere afhængig af hvilket programmeringssprog du bruger.
Avatar billede ldanielsen Nybegynder
30. marts 2006 - 11:07 #7
leif > Du tager fejl:

Vi sætter 5 poster ind i tabellen, og de får id 1, 2, 3, 4, og 5, Så sletter vi nr 5. Nu indsætter vi en ny, og hvilken id får den? 6 er svaret. 5 kan aldrig bruges igen.
Avatar billede hkb-x Nybegynder
30. marts 2006 - 11:30 #8
Jeg har fundet en løsning... men jeg har ombygget systemet så jeg udgår problemet... Men jeg er stadig meget intereseret i et svar så de 30 point går stadig til den ker kan komme med en solid løsning...
Avatar billede erikjacobsen Ekspert
30. marts 2006 - 11:32 #9
Det er ikke fordi, jeg vil have point, men den eneste løsning du kan bruge, er med LAST_INSERT_ID() - eller hvad det tilsvarende nu hedder i dit programmeringssprog (mysql_insert_id() i PHP fx)
Avatar billede leif Seniormester
30. marts 2006 - 11:55 #10
ldanielsen -> Det var da også det jeg skrev.
Avatar billede fsconsult.dk Nybegynder
30. marts 2006 - 12:21 #11
hvad er det du vil opnå med at forudsige næste nummer?
Avatar billede ldanielsen Nybegynder
30. marts 2006 - 12:46 #12
leif > Du siger at den altid lægger 1 til det højeste nummer, men i mit eksempel er det højeste nummer 4. Alligevel vil det næste nummer ikke blive 5, men 6
Avatar billede showsource Seniormester
30. marts 2006 - 12:47 #13
Har brugt flg. ( PHP ) til noget fakturering
"firma" er databasenavn
"faktura" er den table jeg ville ha' værdien af næste id fra

// FIND NÆSTE FAKTURANUMMER
$fields = mysql_query("SHOW TABLE STATUS FROM `firma`");

    while($f = mysql_fetch_assoc($fields)) {
        if($f["Name"] != "faktura") {
        continue;
        }
    $fakturanr = $f["Auto_increment"];
    }

mysql_free_result($fields);
Avatar billede leif Seniormester
30. marts 2006 - 12:59 #14
Ja, okay, min fejl !
Avatar billede fsconsult.dk Nybegynder
30. marts 2006 - 13:04 #15
Hvis to brugere samtidig laver forespørgslen på "næste ledige nummer", vil de begge få 6 (efter eksemplet), men når INSERT'en sker i databasen, vil højst en af dem få denne nøgle!
Det er snarere noget i din programlogik der bør ændres, hvis du er afhængig af at gætte næste nummer ..
Avatar billede showsource Seniormester
30. marts 2006 - 13:09 #16
Skulle lige til at skrive noget a'la' "glem ikke fsconsult's kommentar om flere..." :O)

Mit eks. bliver kun brugt af mig, og derfor ingen risiko for flere med samme id.
Avatar billede ldanielsen Nybegynder
30. marts 2006 - 13:14 #17
Jeg tilslutter mig fsconsult.dk: Jeg kan ikke forstå hvorfor du skal vide hvad ID bliver inden insert, du kan jo få den at vide straks efter.

Hvad er grunden?
Avatar billede hkb-x Nybegynder
19. april 2006 - 12:58 #18
undskyld det sene svar.

grunden er at jeg skal sende det unikke idnummer vedere til kontrol på en anden server før det oprettes i min database.

Men jeg har lavet hele systemet om så jeg laver et insert først... så fsconsult.dk skriv svar for point...
Avatar billede fsconsult.dk Nybegynder
19. april 2006 - 13:00 #19
ok
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