webForumDet fria alternativet

Kombinerad select/insert

9 svar · 350 visningar · startad av spango

spangoMedlem sedan juni 20006 147 inlägg
#1

Hur plockar man smartast fram data från en nyligen inlagd rad i en tabell?
Ponera att man har en räknare som primärnyckel i en tabell. Man lägger in en ny rad i tabellen, men låter denna kolumn med räknaren automagiskt fylla i sig själv.
Om man då skulle vilja lägga in en massa poster relaterade till den tabellen, med den nya radens räknarfält som främmande nyckel.
Kort sagt: Hur får man fram data för den senast inlagda raden i en databas? Man kan fstås använda sig av nåt i stil med SELECT * FROM en_tabell ORDER BY räknaren ASC LIMIT 1 i MySQL, eller använda TOP 1 i Access, men det känns liksom inte rätt.
Vad göra? Nåt i stil med SELECT räknaren FROM (INSERT INTO en_tabell VALUES (1, 2, 3))

------------------
Tror du på ett liv efter födseln?

@ndersMedlem sedan juni 200026 914 inlägg
#2

pratar du sql server nu?

i så fall så kan du göra så här:

insert into blabla (blah1, blah1) values ('blah1', 'blah2'); select @@identity

du får då ett jättepyttigt 1x1-recordset som innehåller id på den insertade posten. :)

mvh,

------------------
<A HREF="http://cartman.nu" TARGET=_blank>
if i'm not back in five minutes, just wait longer.</A>

[Redigerat av @nders den 12 mar 2001]

spangoMedlem sedan juni 20006 147 inlägg
#3

Nä, jag pratade hypotetiskt ;)
Det finns alltså inget generellt sätt att göra det på?

------------------
Tror du på ett liv efter födseln?

@ndersMedlem sedan juni 200026 914 inlägg
#4

nix, pix päronpung. :)

du ska inte komma här och generalisera! ;)

------------------
<A HREF="http://cartman.nu" TARGET=_blank>
if i'm not back in five minutes, just wait longer.</A>

spangoMedlem sedan juni 20006 147 inlägg
#5

Ok, jag hade tänkt att säga "tack" här, men jag tror jag struntar i det eftersom du inte gav det svar jag ville ha ;)

------------------
Tror du på ett liv efter födseln?

@ndersMedlem sedan juni 200026 914 inlägg
#6

bra! ;)

------------------
<A HREF="http://cartman.nu" TARGET=_blank>
if i'm not back in five minutes, just wait longer.</A>

SPiNMedlem sedan mars 20005 832 inlägg
#7

Om du proggar PHP finns det en enkelt funktion för detta, typ mysql_select_id(); eller nåt liknande... Kommer inte ihåg den just nu :)

Men det har ju inte med SQL att göra ;)

------------------
SPiN, bjorne.w@telia.com

--- Är det bara jag som har en britney-cursor? ---

spangoMedlem sedan juni 20006 147 inlägg
#8
SELECT LAST_INSERT_ID();

Blir det i MySQL. Men då kan man ju inte generalizera ;)

------------------
Tror du på ett liv efter födseln?

ToonsterMedlem sedan feb. 20001 546 inlägg
#9

Eftersom det är en räknare, så kan du inte få ut detta id'et utan att skapa en ny fråga till databasen, när man använder script.

alltså:

Först INSERT

Sedan SELECT

Detta gäller även i MySql, med:

SELECT LAST_INSERT_ID();

Man måste köra en ny fråga med den select frågan.

Så man kommer nog inte undan 2 frågor i scriptet, fast man kan behöver bara en anslutning...

Man kan göra en komponent som lägger till data och returnerar id. Eller varför inte en Stored Procedure!

/T

------------------
"Den som väntar på någon som gått behöver inte vänta längre..."

spangoMedlem sedan juni 20006 147 inlägg
#10

Nå, det var väl det man kunde ana. Det suger att jämt ha rätt ;)

------------------
Jag är en tolerant person, men bara mot de jag gillar, så passa dig!

Genererad på 370 ms · cache AV · v20260730165559-full.f96bc7eb