Avatar billede tipsen Nybegynder
15. august 2003 - 23:03 Der er 8 kommentarer og
2 løsninger

Tildel felt værdi fra auto_increment felt i INSERT operation

Hej eksperter

Er det muligt, i et INSERT-statement at tildele et felt en værdi baseret på det id (autot_increment, int) som posten får tildelt automatisk i operationen?

Dvs. noget i retning af:

INSERT INTO tabel SET felt2='blabla', felt3=CONCAT('tekst', værdifrafelt1someridfelt)

Årsagen er at jeg skal lave følgende operationer:

Indsæt værdi i felt2 i tabellen
Gem det id som posten automatisk fik
Brug id til at generere en fil
Opdater post med det genererede filnavn

Jeg benytter MySQL fra PHP - det kan være nogen har en pæn ide til hvordan ovenstående løses?

Mvh

tipsen
Avatar billede erikjacobsen Ekspert
15. august 2003 - 23:04 #1
Avatar billede tipsen Nybegynder
15. august 2003 - 23:27 #2
Erik: Den viste du mig jo også sidst ;-) - kan du virkelig bruge den i den samme insert-statement som man skal have værdien fra!?
Avatar billede tipsen Nybegynder
15. august 2003 - 23:29 #3
Altså, vil noget i retning af dette være muligt:

INSERT INTO tabel SET felt2='blabla', felt3=CONCAT('tekst', LAST_INSERT_ID())

-det jeg er ude efter er at lave ovenstående operationer så effektivt som muligt!
Avatar billede tipsen Nybegynder
15. august 2003 - 23:36 #4
Essensen er jeg gerne vil kunne gøre det i én sql-statement - men ved ikke om det overhovedet er muligt.

Det må det jo næsten være, da jeg i phpMyAdmin kan se "Næste Autoindex 14 " - hvilket er det tal jeg skal bruge - så jeg ved allerede, hvilket id poster får når jeg laver INSERT-statement...
Avatar billede tipsen Nybegynder
15. august 2003 - 23:58 #5
Det er også muligt at de tager informationen vha.

SHOW TABLE STATUS

...
Avatar billede erikjacobsen Ekspert
16. august 2003 - 00:03 #6
Nå, var det dig igen ...

Prøv

  "INSERT INTO tabel SET felt2='blabla'"
  "UPDATE tabel SET felt3=CONCAT('tekst', LAST_INSERT_ID()) WHERE id=LAST_INSERT_ID()"
Avatar billede Slettet bruger
18. august 2003 - 02:04 #7
http://www.mysql.com/doc/en/INSERT.html

Første brugerkommentar:

This page states that you can use a previously
inserted column to help define a new column, in its
example. However, it seems that auto_increment
columns aren't defined until after the rest of the
query is evaluated. This makes sense, as it wouldn't
assign an auto_increment value until the parser has
verified that the query is valid, but it means that you
can't use an auto_increment column to help define
subsequent columns. For example:

INSERT INTO `table` (id,sentence) VALUES(NULL,
concat('The id is ',id))

Even though the id column is listed first and is
evaluated first, a value is not inserted into it until the
rest of the query is evaluated, so the sentence
column would always contain the string 'The id is 0'.

Så det kan nok ikke lade sig gøre i én enkelt forespørgsel (uden sub-queries).
Avatar billede Slettet bruger
18. august 2003 - 02:06 #8
Og jo nok heller ikke med sub-queries :)
Avatar billede tipsen Nybegynder
18. august 2003 - 10:22 #9
Jeg siger tak for hjælpen - Eriks fungerer som sædvanligt fint og mercur fik bekræftet at det ikke kan gøres kortere!

mercur: Hvis du også gad lægge et svar.
Avatar billede Slettet bruger
18. august 2003 - 16:51 #10
Fint.
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