webForumDet fria alternativet

Fylla databaskolumner i ordning

ASP

5 svar · 512 visningar · startad av M@rtin

Medlem sedan dec. 19992 085 inlägg
Frågan#1

Jag har en databastabell som ser ut ungefär så här:

id | var1 | var2 | var3 | var4

Nu vill jag att den ska fyllas i båda dimensionerna varje gång man vill lägga in nåt i databasen. Alltså först och främst ska var1-4 fyllas i ordning, sedan ska det skapas en ny rad med nytt id när det behövs.

Hur gör man detta?

Medlem sedan juni 200032 967 inlägg
#2

Om du har möjlighet att försöka skriva frågan på ett annat sätt skulle det underlätta. Jag förstår ingenting! :)

Medlem sedan dec. 19992 085 inlägg
#3

Hehe, ja det jag egentligen vill åstadkomma är att man för varje dag kan lägga in fyra värden.

date_id | va1 | va2 | va3 | va4
050422 | 100 | 200 | 150 | 250
050423 | 123 | 320 | 120 | 100
050424 | 340 | 120 | 200 | 300
050423 | 120 | 230 |

Värdena kan komma när som helst, det behöver inte (och är oftast inte) under samma datum som där jag vill lägga det.

Om det nu är 050422 och jag får in ett värde så ska det läggas efter 230 på datum 050423 och det är det här jag inte riktigt vet hur man gör.

Ett annat problem är hur man lägger in nästkommande datum när en rad är full.

Svårt att förklara på något annat sätt men jag hoppas det klarnar. :)

Medlem sedan maj 200027 inlägg
#4

Låter som något du lämpligtvis gör med en lagrad procedur om det nu är mssql du kör, den skulle väl i princip se ut såhär:

CREATE PROCEDURE [dbo].[spSaveValue] (@value as varchar(50)) AS

declare @var1 as varchar(50)
declare @var2 as varchar(50)
declare @var3 as varchar(50)
declare @var4 as varchar(50)
declare @id as varchar(50)

select top 1 @id=id, @var1=var1, @var2=var2, @var3=var3, @var4=var4 from test order by id desc

if @var1 is null begin
update test set var1=@value where id=@id
end else begin
if @var2 is null begin
update test set var2=@value where id=@id
end else begin
if @var3 is null begin
update test set var3=@value where id=@id
end else begin
if @var4 is null begin
update test set var4=@value where id=@id
end else begin
insert into test (var1) values (@value)
end
end
end
end

(om nu tabellen heter test och idkollumnen heter id)

Om du nu inte kör mssql kan du göra samma sak i asp, något i stil med:

sub saveValue(sValue)
sValue = replace(sValue, "'", "''")
set oRS = odb.execute("select top 1 id, var1,var2, var3,var4 from test order by id desc")

if isnull(ors("var1").value) then
odb.execute "update test set var1='" & sValue & "' where id=" & ors("id")
exit sub
end if

if isnull(ors("var2").value) then
odb.execute "update test set var2='" & sValue & "' where id=" & ors("id")
exit sub
end if

if isnull(ors("var3").value) then
odb.execute "update test set var3='" & sValue & "' where id=" & ors("id")
exit sub
end if

if isnull(ors("var4").value) then
odb.execute "update test set var4='" & sValue & "' where id=" & ors("id")
exit sub
end if

odb.execute "insert into test (var1) values ('" & sValue & "'")

end sub

----------
Hmms.. nu blev det säkert en jäkla massa rörig kod och ett långt meddelande, (sitter och skriver allt direkt i webbläsaren så jag garanterar inte att det funkar.. men nått i den stilen iaf)...

Medlem sedan dec. 19992 085 inlägg
#5

Kör mysql tyvärr men din andra lösning borde fungera alldeles utmärkt den med!

Tack så mycket!

Medlem sedan juni 200032 967 inlägg
#6

Jag tycker mest att det verkar som att datamodellen stinker. Men å andra sidan kan jag inte för mitt liv förstå mig på vad du håller på med, så jag kan inte direkt ge tips.

Generellt sett tycker jag dock att du borde ha en tabell med ett datum och ett fält för "värde" (vad nu det är), och upp till fyra poster per datum.

Jag förstår inte alls heller varför ett värde som tillhör 050422 skall ligga i ett fält som tillhör en post för 050423. Men det är väl inte meningen att man ska förstå...?

mvh

257 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)