View Full Version : Fylla databaskolumner i ordning
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?
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! :)
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. :)
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)...
Kör mysql tyvärr men din andra lösning borde fungera alldeles utmärkt den med!
Tack så mycket!
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
vBulletin® v3.8.6, Copyright ©2000-2013, Jelsoft Enterprises Ltd.