Avatar billede fizk Nybegynder
10. marts 2009 - 10:07 Der er 5 kommentarer

Mere end én auto_increment

Hej!
Jeg sidder lige og leger lidt med en ide, men jeg ved ikke om det kan lade sig gøre - jeg har ikke kunnet finde noget på nettet om det.

Jeg sidder med en tabel, der har et id som er auto_increment.
Hver række hører sammen med en kategori.
Rækkerne er selvfølgeligt fortløbende fra 1 - XXX med id'et.
Kan det lade sig gøre at lave et alternativt ID, som er fortløbende, baseret på kategorien?

eks.

Kateori - alt_id - id
mad - 1 - 1
dyr - 1 - 2
mad - 2 - 3
mad - 3 - 4
dyr - 2 - 5

Håber det er forståeligt :)
Avatar billede fennec Nybegynder
10. marts 2009 - 10:38 #1
Nu har jeg ikke lige en MySQL at teste på, men det kunne gøres sådan i MS-SQL:

insert into dinTabel(alt_ID, name)
select (select isNull(max(alt_id),0)+1 from dinTabel where name='mad'), 'mad'
Avatar billede fennec Nybegynder
10. marts 2009 - 10:41 #2
isNull skal omdøbes til IFNULL, så tror jeg den vil køre:

insert into dinTabel(alt_ID, name)
select (select IFNULL(max(alt_id),0)+1 from dinTabel where name='mad'), 'mad'
Avatar billede fizk Nybegynder
10. marts 2009 - 10:45 #3
Jeg har været ude i noget lignende, men det er som om min mysql database ikke er med på når man laver en inner query og giver fejl (den sædvanlige "You have an error in your SQL syntax..."), så det var lidt derfor jeg håbede man kunne gøre det på en anden måde ;)
Avatar billede fennec Nybegynder
10. marts 2009 - 11:37 #4
Hvilken version kører du??

Nu har jeg lige testet på en MySQL og det fungerede fint for mig.
Avatar billede arne_v Ekspert
10. marts 2009 - 18:31 #5
Alt med MAX lyder principielt usikkert med hensyn til concurrency problemer.

Grundliggende kan en tabel i MySQL kun have et auto_increment felt.

Det bedste ville være at droppe ideen. Den composite primary key vil ikke give dig andet end problemer.

Hvis du insisterer så lav en tabel med 2 felter:
  key
  newid
lav tabellen som InnoDB tabel og brug tranaction isolation level serializable og bundt SELECT og UPDATE i en transaktion.
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