Kalender
Id | Datum | Frukt_id | Namn_id | Antal
ex. 1 | 98-11-12 | 1 | 1 | 2
Alltså; Olle har ätit två bananer den 12:e november -98
Hur skulle en sådan sql-sats se ut? Går det att lösa på ett smartare sätt?
A_fett osv. innehåller kvoten per dag som Olle får äta.
B_fett osv. innehåller gram fett av 100g. frukt.
Sedan så vill jag ta ut hur mycket fett osv. Olle har ätit i förhållande till sin egen kvot och dag.
Effektivt, tja hur mycket data är det i tabellerna?
Ja, i Personer kanske det kommer att byggas ut med ett par tusen, i frukter ca 1500 och i kalendern så kan jag tänka mig att det blir ca tio poster per dag och person. Med enkel mattematik så borde "kalender" då innehålla
ca 7 300 000 poster/år Många poster blir det....
Data är dock ej så mycket, efersom att jag endast lagrar id, datum samt namn_id och frukt_id.
Då bör du indexera de kolumner som används vid join. Det är lite olika i olika DBMS. I de flesta så innebär en foreign key att man också skapar index på de kolumnerna.
select namn,
sum(antal * B_fett) ,
sum( anta*B_vitamin ),
sum(antal * B_kolhydrater),
sum( antal * B_jarn ),
sum(antal * B_fett) / (A_fett + 0.0),
sum( anta*B_vitamin ) / (A_vitamin + 0.0),
sum(antal * B_kolhydrater)/(A_kolhydrater + 0.0),
sum( antal * B_jarn )/(A_jarn + 0.0),
from personer p,frukter f,kalender k
where p.id = k.namn_id
and k.frukt_id = frukter.id
group by name,datum
Jag förstår att detta är för att lista "ospecade" personer.
Detta är möjligen lite off topic, men i ASP nu då:
Låt säga att jag har en querystring med Personens id samt datum och vill lista denna persons unika dags fruktintag. Hur gör man då?
ex. ..where "& request("id") &" = k.namn_id... osv
Hur skriver man ut de summerade värdena? (Skall jag skapa recordsets?)
ex. Response.write rs sum( anta*B_vitamin ) / (A_vitamin + 0.0)
Hur gör man detta på bästa sätt?
Jaså, det trodde jag var klart. (Det var det jag menade med just så.)
select namn,
sum(antal * B_fett) ,
sum( anta*B_vitamin ),
sum(antal * B_kolhydrater),
sum( antal * B_jarn ),
sum(antal * B_fett) / (A_fett + 0.0),
sum( anta*B_vitamin ) / (A_vitamin + 0.0),
sum(antal * B_kolhydrater)/(A_kolhydrater + 0.0),
sum( antal * B_jarn )/(A_jarn + 0.0),
datum
from personer p,frukter f,kalender k
where p.id = k.namn_id
and k.frukt_id = frukter.id
and name = 'Olle'
and datum = #2002-10-04#
group by name,datum
select namn,
sum(antal * B_fett) ,
sum( anta*B_vitamin ),
sum(antal * B_kolhydrater),
sum( antal * B_jarn ),
sum(antal * B_fett) / (avg(A_fett) + 0.0),
sum( anta*B_vitamin ) / (avg(A_vitamin) + 0.0),
sum(antal * B_kolhydrater)/(avg(A_kolhydrater) + 0.0),
sum( antal * B_jarn )/(avg(A_jarn) + 0.0),
datum
from personer p,frukter f,kalender k
where p.id = k.namn_id
and k.frukt_id = frukter.id
and name = 'Olle'
and datum = #2002-10-04#
group by name,datum
Ok, nu har jag en massa siffror, men...
Om jag också vill loopa fram vilken/vilka frukter olle har ätit vid ett specifikt datum och inte bara summan av kardemumman.
Ex. Datum 02-10-27 Namn: Olle
Frukt-stund på fröets förskola
-----------------------------------------
Banan 12g fett Antal: 2
Blåbär 16g fett Antal: 4
------------------------------------------
Totalt: Fett 45g | Kolhydrater: 541 osv
När jag försöker att lägga till något ex.Frukt så står det:
You tried to execute a query that does not include the specified expression 'Frukt' as part of an aggregate function.
Måste jag skapa flera sql-satser?
I så fall så får du hämta alla värden och utföra slutsummeringen i ASP
strSQL = "select namn,frukt,antal,"&_
"B_fett , B_vitamin"&_
"B_kolhydrater, B_jarn"&_
"from personer p,frukter f,kalender k "&_
"where p.id = k.namn_id "&_
" and k.frukt_id = frukter.id"&_
" and namn = 'Olle'"&_
" and datum = #2002-10-27# "
set rs = connect.execute(sql)
sumFett = 0
sumVitamin = 0
sumKolhydrat = 0
sumJarn = 0
while not rs.eof
'visa data
'summera
rs.movenext
wend
'visa totalsumma
Jag tittade lite mer på din datamodell. Egentligen så borde du lagra beståndsdelarna (eller vad man nu skall kalla det) i en egen tabell och så skulle du ha en många-många relation mellan frukt och beståndsdelar.
Delar
id name
---------
1 Fett
2 Järn
FruktDelar
FruktID delid gram
-----------------------
1 1 15
Det är samma sak för personer att dom har en många till många relation till beståndsdelar.
Det är förmodligen inte relevant att lagra varje person man kan definera ett antal grupper (beroende på vikt/ålder/kön?)
och då behövs en grupptillhörighet i persontabellen.
Med den här modellen är det mycket enklare att lägga till nya delar som ni är intresserade av. Med din nuvarande tabellstruktur så måste man du lägga till nya kolumner och skriva om frågorna.
(Lite sent påtänkt.)
270 ms totalt · 4 externa anrop · v20260731065814-full.c32e866c