Kombinerad select/insert

Databaser & SQL

9 svar · 367 visningar · startad av spango

Medlem sedan juni 20008 205 inlägg
Trådstart#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))

Medlem sedan juni 200032 967 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,

Medlem sedan juni 20008 205 inlägg
#3

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

Medlem sedan juni 200032 967 inlägg
#4

nix, pix päronpung. :)

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

Medlem sedan juni 20008 205 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 ;)

Medlem sedan juni 200032 967 inlägg
#6

bra! ;)

Medlem sedan mars 20007 896 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 ;)

Medlem sedan juni 20008 205 inlägg
#8
SELECT LAST_INSERT_ID();

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

Medlem sedan feb. 20001 590 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

Medlem sedan juni 20008 205 inlägg
#10

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

253 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)