/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
MySQL - Sidste id i en tabel - Hvordan?
Fra : Ukendt


Dato : 26-02-03 13:52

I en MySQL database hvor der er adskillige tabeller har jeg brug for at få
returneret det sidste id i en navngiven tabel.

Det er altså ikke nødvendigvis den tabel der sidst blev skrevet i.

Alle id genereres med AUTO_INCREMENT.


Jeg har søgt i MySQL manualen men synes ikke at jeg fandt noget brugbart.

I øvrigt kører jeg PHP og har da overvejet at bruge "SELECT id FROM table"
og så læse værdien i det sidste felt at resultat-array'et men da jeg
forventer at én af tabellerne på sigt kommer til at rumme 100.000 rows
bliver dette array sikkert for resourcekrævende at håndtere.


Nogen idéer?


På forhånd tak for hjælpen!
Claus



 
 
Jonas Koch Bentzen (26-02-2003)
Kommentar
Fra : Jonas Koch Bentzen


Dato : 26-02-03 14:24

"Claus Nygaard-Pedersen" <cnpatofir.dk> wrote:

> I en MySQL database hvor der er adskillige tabeller har jeg brug for at få
> returneret det sidste id i en navngiven tabel.

SELECT MAX(id) FROM tabel

--
Jonas Koch Bentzen

Jimmy (26-02-2003)
Kommentar
Fra : Jimmy


Dato : 26-02-03 14:28


"Jonas Koch Bentzen" <ingen.email@eksempel.dk> wrote in message
news:b3if55$f16$1@sunsite.dk...
> "Claus Nygaard-Pedersen" <cnpatofir.dk> wrote:
>
> > I en MySQL database hvor der er adskillige tabeller har jeg brug for at

> > returneret det sidste id i en navngiven tabel.
>
> SELECT MAX(id) FROM tabel


Hvis det er det *senest* indsatte ID er ovenstående ubrugeligt.
Der skal følgende anvendes:

SELECT LAST_INSERT_ID() AS Last_ID FROM <tabel>

Hvad skal du bruge informationen til?

Mvh
Jimmy



Ukendt (26-02-2003)
Kommentar
Fra : Ukendt


Dato : 26-02-03 14:36

"Jimmy" <nyhedsgruppe@get3_erstat_3_med_2_net.dk> skrev i en meddelelse
news:lh37a.1400$mp5.939@news.get2net.dk...
>
> "Jonas Koch Bentzen" <ingen.email@eksempel.dk> wrote in message
> news:b3if55$f16$1@sunsite.dk...
> > "Claus Nygaard-Pedersen" <cnpatofir.dk> wrote:
> >
> > > I en MySQL database hvor der er adskillige tabeller har jeg brug for
at
> få
> > > returneret det sidste id i en navngiven tabel.
> >
> > SELECT MAX(id) FROM tabel
>
>
> Hvis det er det *senest* indsatte ID er ovenstående ubrugeligt.

Sært! Det virker ellers fint. Hvorfor mener du at det er ubrugeligt?

> Der skal følgende anvendes:
>
> SELECT LAST_INSERT_ID() AS Last_ID FROM <tabel>

Det virker til gengæld ikke!

Tak for hjælpen til jer begge :)

Claus



Jimmy (26-02-2003)
Kommentar
Fra : Jimmy


Dato : 26-02-03 16:05


"Claus Nygaard-Pedersen" <cnpatofir.dk> wrote in message
news:3e5cc2b1$0$139$edfadb0f@dtext02.news.tele.dk...
> "Jimmy" <nyhedsgruppe@get3_erstat_3_med_2_net.dk> skrev i en meddelelse
> news:lh37a.1400$mp5.939@news.get2net.dk...
> >
> > "Jonas Koch Bentzen" <ingen.email@eksempel.dk> wrote in message
> > news:b3if55$f16$1@sunsite.dk...
> > > "Claus Nygaard-Pedersen" <cnpatofir.dk> wrote:
> > >
> > > > I en MySQL database hvor der er adskillige tabeller har jeg brug for
> at
> > få
> > > > returneret det sidste id i en navngiven tabel.
> > >
> > > SELECT MAX(id) FROM tabel
> >
> >
> > Hvis det er det *senest* indsatte ID er ovenstående ubrugeligt.
>
> Sært! Det virker ellers fint. Hvorfor mener du at det er ubrugeligt?

Forestil dig, at 100 personer indsætter en række i din database på samme
tid.
Du ønsker nu det sidst indsatte ID, men har ingen garanti for, at det
højeste på det tidspunkt du udfører din SELECT er det ID, der blev indsat,
da du indsatte din række.


> > Der skal følgende anvendes:
> >
> > SELECT LAST_INSERT_ID() AS Last_ID FROM <tabel>
>
> Det virker til gengæld ikke!

Så gør du det forkert.
Søg på LAST_INSERT_ID på mysql.com

Mvh
Jimmy



Ukendt (26-02-2003)
Kommentar
Fra : Ukendt


Dato : 26-02-03 16:25

"Jimmy" <nyhedsgruppe@get3_erstat_3_med_2_net.dk> skrev i en meddelelse
news:uI47a.1415$f76.51@news.get2net.dk...
>
> "Claus Nygaard-Pedersen" <cnpatofir.dk> wrote in message
> news:3e5cc2b1$0$139$edfadb0f@dtext02.news.tele.dk...
> > "Jimmy" <nyhedsgruppe@get3_erstat_3_med_2_net.dk> skrev i en meddelelse
> > news:lh37a.1400$mp5.939@news.get2net.dk...
> > >
> > > "Jonas Koch Bentzen" <ingen.email@eksempel.dk> wrote in message
> > > news:b3if55$f16$1@sunsite.dk...
> > > > "Claus Nygaard-Pedersen" <cnpatofir.dk> wrote:
> > > >
> > > > > I en MySQL database hvor der er adskillige tabeller har jeg brug
for
> > at
> > > få
> > > > > returneret det sidste id i en navngiven tabel.
> > > >
> > > > SELECT MAX(id) FROM tabel
> > >
> > >
> > > Hvis det er det *senest* indsatte ID er ovenstående ubrugeligt.
> >
> > Sært! Det virker ellers fint. Hvorfor mener du at det er ubrugeligt?
>
> Forestil dig, at 100 personer indsætter en række i din database på samme
> tid.
> Du ønsker nu det sidst indsatte ID, men har ingen garanti for, at det
> højeste på det tidspunkt du udfører din SELECT er det ID, der blev indsat,
> da du indsatte din række.
>
>
> > > Der skal følgende anvendes:
> > >
> > > SELECT LAST_INSERT_ID() AS Last_ID FROM <tabel>
> >
> > Det virker til gengæld ikke!
>
> Så gør du det forkert.

Hmmm! Jeg gjorde nøjagtigt som du skrev.

> Søg på LAST_INSERT_ID på mysql.com

Der gjorde jeg allerede inden jeg skrev mit første indlæg i denne tråd og
som du måske husker... Uden at blive afgørende klogere.

Måske du kan fortælle nøjagtigt hvad det er jeg skal gøre med funktionen?

Claus



Jimmy (26-02-2003)
Kommentar
Fra : Jimmy


Dato : 26-02-03 16:28


"Claus Nygaard-Pedersen" <cnpatofir.dk> wrote in message
news:3e5cdc08$0$132$edfadb0f@dtext02.news.tele.dk...

> > > > SELECT LAST_INSERT_ID() AS Last_ID FROM <tabel>
> > >
> > > Det virker til gengæld ikke!
> >
> > Så gør du det forkert.
>
> Hmmm! Jeg gjorde nøjagtigt som du skrev.

1 - Hvilket stykke kode har du præcist brugt?
2 - Hvad var resultatet?

Mvh
Jimmy



Jakob Andersen (26-02-2003)
Kommentar
Fra : Jakob Andersen


Dato : 26-02-03 16:45

"Claus Nygaard-Pedersen" <cnpatofir.dk> wrote
> Måske du kan fortælle nøjagtigt hvad det er jeg skal gøre med funktionen?

Fordelen ved at bruge LAST_INSERT_ID funktionen istedet for blot at bruge
MAX funktionen er at LAST_INSERT_ID er afhængig af connection og derfor vil
du altid få returneret ID'et på den række der er indsat vha. ligepræcis den
connection der benyttes.

Dokumentationen for funktionen kan findes her:
<http://www.mysql.com/doc/en/Miscellaneous_functions.html>

--
Jakob Andersen



Jonas Koch Bentzen (26-02-2003)
Kommentar
Fra : Jonas Koch Bentzen


Dato : 26-02-03 17:52

Jakob Andersen wrote:
>
> Fordelen ved at bruge LAST_INSERT_ID funktionen istedet for blot at bruge
> MAX funktionen er at LAST_INSERT_ID er afhængig af connection og derfor
> vil du altid få returneret ID'et på den række der er indsat vha.
> ligepræcis den connection der benyttes.

Fint - men det var jo ikke det, han ville have. Det fremgik ret tydeligt, at
han gerne ville have det højeste ID selv i de tilfælde, hvor der ikke i
samme forbindelse er indsat en række.

--
Jonas Koch Bentzen

Jakob Andersen (26-02-2003)
Kommentar
Fra : Jakob Andersen


Dato : 26-02-03 20:47

"Jonas Koch Bentzen" <ingen.email@eksempel.dk> wrote
> Fint - men det var jo ikke det, han ville have. Det fremgik ret tydeligt,
at
> han gerne ville have det højeste ID selv i de tilfælde, hvor der ikke i
> samme forbindelse er indsat en række.

Ja, det er jeg godt klar over. Jeg prøvede blot at forklare hvordan
LAST_INSERT_ID virker i forhold til MAX så spørgeren kunne vælge afhængigt
af opgaven en anden god gang. Dette gjorde jeg fordi spørgeren ikke havde
kunnet finde LAST_INSERT_ID i dokumentationen.

Men jeg skal da undskylde hvis jeg har vildledt spørgeren.

--
Jakob Andersen



Kristian Damm Jensen (26-02-2003)
Kommentar
Fra : Kristian Damm Jensen


Dato : 26-02-03 15:50

Jimmy wrote:
>
> "Jonas Koch Bentzen" <ingen.email@eksempel.dk> wrote in message
> news:b3if55$f16$1@sunsite.dk...
> > "Claus Nygaard-Pedersen" <cnpatofir.dk> wrote:
> >
> > > I en MySQL database hvor der er adskillige tabeller har jeg brug for at
> få
> > > returneret det sidste id i en navngiven tabel.
> >
> > SELECT MAX(id) FROM tabel
>
> Hvis det er det *senest* indsatte ID er ovenstående ubrugeligt.
> Der skal følgende anvendes:

Efter som der er tale om autoincrement, vil det give samme resultat.


--
Kristian Damm Jensen | Feed the hungry at www.thehungersite.com
kristian-damm.jensen@cgey.com | Two wrongs doesn't make a right,
ICQ# 146728724 | but three lefts do.


Jimmy (26-02-2003)
Kommentar
Fra : Jimmy


Dato : 26-02-03 16:06


"Kristian Damm Jensen" <kristian-damm.jensenRE@MOVEcgey.com> wrote in
message news:3E5CD403.67B61866@MOVEcgey.com...
> Jimmy wrote:
> >
> > "Jonas Koch Bentzen" <ingen.email@eksempel.dk> wrote in message
> > news:b3if55$f16$1@sunsite.dk...
> > > "Claus Nygaard-Pedersen" <cnpatofir.dk> wrote:
> > >
> > > > I en MySQL database hvor der er adskillige tabeller har jeg brug for
at
> > få
> > > > returneret det sidste id i en navngiven tabel.
> > >
> > > SELECT MAX(id) FROM tabel
> >
> > Hvis det er det *senest* indsatte ID er ovenstående ubrugeligt.
> > Der skal følgende anvendes:
>
> Efter som der er tale om autoincrement, vil det give samme resultat.

Nej langt fra altid.
Se mit svar til Claus.

Mvh
Jimmy



Ukendt (26-02-2003)
Kommentar
Fra : Ukendt


Dato : 26-02-03 16:28

"Jimmy" <nyhedsgruppe@get3_erstat_3_med_2_net.dk> skrev i en meddelelse
news:SI47a.1416$Mi6.1092@news.get2net.dk...
>
> "Kristian Damm Jensen" <kristian-damm.jensenRE@MOVEcgey.com> wrote in
> message news:3E5CD403.67B61866@MOVEcgey.com...
> > Jimmy wrote:
> > >
> > > "Jonas Koch Bentzen" <ingen.email@eksempel.dk> wrote in message
> > > news:b3if55$f16$1@sunsite.dk...
> > > > "Claus Nygaard-Pedersen" <cnpatofir.dk> wrote:
> > > >
> > > > > I en MySQL database hvor der er adskillige tabeller har jeg brug
for
> at
> > > få
> > > > > returneret det sidste id i en navngiven tabel.
> > > >
> > > > SELECT MAX(id) FROM tabel
> > >
> > > Hvis det er det *senest* indsatte ID er ovenstående ubrugeligt.
> > > Der skal følgende anvendes:
> >
> > Efter som der er tale om autoincrement, vil det give samme resultat.
>
> Nej langt fra altid.
> Se mit svar til Claus.

En henvisning til manualen er vist ikke noget svar. Det er helt klart for
mig at disse to kodelinjer langt fra altid giver samme resultat. Faktisk er
det i modsætning til Jonas' forslag endnu ikke lykkedes mig at få noget
brugbart ud af dit.

Når du nu mener at du har ret kunne du ikke fortælle hvorfor dit forslag
skulle være mere korrekt end Jonas' ?

Claus



Jimmy (26-02-2003)
Kommentar
Fra : Jimmy


Dato : 26-02-03 16:31


"Claus Nygaard-Pedersen" <cnpatofir.dk> wrote in message
news:3e5cdcc6$0$147$edfadb0f@dtext02.news.tele.dk...
> "Jimmy" <nyhedsgruppe@get3_erstat_3_med_2_net.dk> skrev i en meddelelse
> news:SI47a.1416$Mi6.1092@news.get2net.dk...
> >
> > "Kristian Damm Jensen" <kristian-damm.jensenRE@MOVEcgey.com> wrote in
> > message news:3E5CD403.67B61866@MOVEcgey.com...

> > > Efter som der er tale om autoincrement, vil det give samme resultat.
> >
> > Nej langt fra altid.
> > Se mit svar til Claus.
>
> En henvisning til manualen er vist ikke noget svar.

Det er en god måde at blive klogere på uden at sætte andre til at udføre dit
arbejde.


> Det er helt klart for
> mig at disse to kodelinjer langt fra altid giver samme resultat. Faktisk
er
> det i modsætning til Jonas' forslag endnu ikke lykkedes mig at få noget
> brugbart ud af dit.

Nå.


> Når du nu mener at du har ret kunne du ikke fortælle hvorfor dit forslag
> skulle være mere korrekt end Jonas' ?

Det har jeg gjort.
Jeg har fejlet.
Nu giver jeg op.

Held og lykke.

Mvh
Jimmy



Ukendt (26-02-2003)
Kommentar
Fra : Ukendt


Dato : 26-02-03 16:45

"Jimmy" <nyhedsgruppe@get3_erstat_3_med_2_net.dk> skrev i en meddelelse
news:U457a.1427$tE6.821@news.get2net.dk...
>
> "Claus Nygaard-Pedersen" <cnpatofir.dk> wrote in message
> news:3e5cdcc6$0$147$edfadb0f@dtext02.news.tele.dk...
> > "Jimmy" <nyhedsgruppe@get3_erstat_3_med_2_net.dk> skrev i en meddelelse
> > news:SI47a.1416$Mi6.1092@news.get2net.dk...
> > >
> > > "Kristian Damm Jensen" <kristian-damm.jensenRE@MOVEcgey.com> wrote in
> > > message news:3E5CD403.67B61866@MOVEcgey.com...
>
> > > > Efter som der er tale om autoincrement, vil det give samme resultat.
> > >
> > > Nej langt fra altid.
> > > Se mit svar til Claus.
> >
> > En henvisning til manualen er vist ikke noget svar.
>
> Det er en god måde at blive klogere på uden at sætte andre til at udføre
dit
> arbejde.

Sandt, men at spørge om tingenes sammenhæng kan vel næppe kaldes at bede
andre om at udføre mit arbejde.

> > Det er helt klart for
> > mig at disse to kodelinjer langt fra altid giver samme resultat. Faktisk
> er
> > det i modsætning til Jonas' forslag endnu ikke lykkedes mig at få noget
> > brugbart ud af dit.
>
> Nå.
>
>
> > Når du nu mener at du har ret kunne du ikke fortælle hvorfor dit forslag
> > skulle være mere korrekt end Jonas' ?
>
> Det har jeg gjort.

Jeg har nu kigget tråden igennem om må så konstatere at jeg ikke fangede
følgende som du skrev tidligere:

<citat>
Forestil dig, at 100 personer indsætter en række i din database på samme
tid.
Du ønsker nu det sidst indsatte ID, men har ingen garanti for, at det
højeste på det tidspunkt du udfører din SELECT er det ID, der blev indsat,
da du indsatte din række.
</citat>

Det forekommer mig at jeg ikke fik formuleret mit spørgsmål tydeligt nok for
du antager at det id jeg søger har noget at gøre med en række som jeg netop
har indsat. Dette er ikke korrekt. Jeg ønsker blot det højeste id for en
given tabel.

> Jeg har fejlet.
> Nu giver jeg op.
>
> Held og lykke.

Tak og tak for din tid!

God weekend

Claus



Morten Guldager (26-02-2003)
Kommentar
Fra : Morten Guldager


Dato : 26-02-03 21:09

Wed, 26 Feb 2003 at 13:23 GMT Jonas Koch Bentzen wrote
> "Claus Nygaard-Pedersen" <cnpatofir.dk> wrote:
>
>> I en MySQL database hvor der er adskillige tabeller har jeg brug for at få
>> returneret det sidste id i en navngiven tabel.
>
> SELECT MAX(id) FROM tabel

Enig, auto_increment giver altid en højere værdi og derfor må
den største være den sidste.

Men hvis du koder til et multitasking setup (f.eks. web) og du vil
være sikker på at den sidste stadig er den sidste når du begynder
at bruge den er det nødvændigt med en lås. Se f.eks. på "lock table"


/Morten

Ukendt (27-02-2003)
Kommentar
Fra : Ukendt


Dato : 27-02-03 15:12

On Wed, 26 Feb 2003 13:52:20 +0100, "Claus Nygaard-Pedersen"
<cnpatofir.dk> wrote:

>I en MySQL database hvor der er adskillige tabeller har jeg brug for at få
>returneret det sidste id i en navngiven tabel.
>
>Det er altså ikke nødvendigvis den tabel der sidst blev skrevet i.
>
>Alle id genereres med AUTO_INCREMENT.
>
>
>Jeg har søgt i MySQL manualen men synes ikke at jeg fandt noget brugbart.
>
>I øvrigt kører jeg PHP og har da overvejet at bruge "SELECT id FROM table"
>og så læse værdien i det sidste felt at resultat-array'et men da jeg
>forventer at én af tabellerne på sigt kommer til at rumme 100.000 rows
>bliver dette array sikkert for resourcekrævende at håndtere.

Hvis det er lige efter dit sidste INSERT så kan du bruge følgende i
PHP

$indsaet = mysql_query("SELECT ..... ") OR DIE (mysql_error());

$last_insert = mysql_last_insert($indsaet) + 1;

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408926
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste