Avatar billede apromis Praktikant
21. juli 2010 - 21:01 Der er 18 kommentarer og
1 løsning

Udtræk med sum i x periode (2 sql udtræk)

Hej Allesammen.

Jeg har følgende MySql database :
Id    Bruger    Time    Sammenh    Produkt_id    Maengde    Vaerdi1    Vaerdi2    Vaerdi3    Vaerdi4    Kommentar

Time er en time() (antal sekunder fra 1970).
Sammenh indeholder et tal som kan være mellem 1-7. (forklaring senere)

Mit udtræk kommer fra en anden side og vil se f.eks indeholde nedenstående :
§start = start tidspunktet, time() brugt (f.eks 00:00:00 1/10-2008)
§end = Slut tidpunktet, time() brugt (f.eks 00:00:00 31/12-2008)

Idéen er at mysql sætningen skal lave to udtræk :

1. (SQL udtræk 1)
Den skal adder alle værdierne i vaerdi1, i vaerdi2, i vaerdi3 samt i vaerdi4 (særskilt), for alle poster i perioden §start til §end.
Dermed giver udtrækket :
§vaerdi1 = f.eks 1234 (i alt)
§vaerdi2 = f.eks 1353 (i alt)
§vaerdi3 = f.eks 1503 (i alt)
§vaerdi4 = f.eks 1425 (i alt)

2. (SQL udtræk 2)
Dette udtræk skal på samme måde adder alle værdierne som opdelt jf. ovenstående.
Dette skal dog ske i en form for bokse, da kolonennen Sammenh indeholder en værdi som binder dem sammen.
Der kan være en værdi i sammenh fra 1 til 7, hvorefter alle værdier med samme sammenhæng skal lægges sammen i given periode.
Udputtet skal dermed være :
§vaerdi1.1 = f.eks 1432 (i alt)
§vaerdi1.2 = f.eks 1234 (i alt)
...
§vaerdi7.4 = f.eks 3432 (i alt)


Kan nogle hjælpe med ovenstående ?
På forhånd tak
Avatar billede jakobdo Ekspert
21. juli 2010 - 21:45 #1
SQL1 må kunne lave som:

SELECT SUM(vaerdi1), SUM(vaerdi2), SUM(vaerdi3), SUM(vaerdi4) FROM tabel_navn WHERE start = $start AND slut = $slut

SQL2 forstår jeg ikke lige. Eller også er det bare for svært til mig. :o)
Avatar billede apromis Praktikant
21. juli 2010 - 22:00 #2
Lad os bare starte med den første.
Den vil da ikke virke ? Tiden skal vel være imellem istedet.
Dermed kan du ikke løse den på den måde. Nu vil den kun fange hvis start og end er ens ?
Avatar billede jakobdo Ekspert
21. juli 2010 - 22:12 #3
Hvad så med:

SELECT SUM(vaerdi1), SUM(vaerdi2), SUM(vaerdi3), SUM(vaerdi4) FROM tabel_navn WHERE Time BETWEEN $start AND $slut
Avatar billede apromis Praktikant
21. juli 2010 - 22:14 #4
Den vil jeg lige teste om få minutter.
Men hvordan udskriver jeg f.eks den første sum ? Mangler der ikke as eller sådan noget. Eller er variabel defineret som $vaerdi1 ?
Avatar billede jakobdo Ekspert
21. juli 2010 - 22:16 #5
Du kan godt lave det til:

$query = mysql_query("SELECT SUM(vaerdi1) as v1, SUM(vaerdi2) as v2, SUM(vaerdi3) as v3, SUM(vaerdi4) as v4 FROM tabel_navn WHERE Time BETWEEN $start AND $slut");

og så tilgå dem via:

$row = mysql_fetch_assoc($query);
echo $row['v1'];
echo $row['v2'];
etc...
Avatar billede apromis Praktikant
21. juli 2010 - 22:28 #6
Den driller stadig med tiden, men den virker hvis jeg fjerner denne del (så det med sum virker).
Den finder ingen poster hvis jeg prøver f.eks :
$start = "0";
$end = "1279743878";

Mine data er :
1279720542
1279734942
1279742142

Så den burde fange dem alle :(
Avatar billede apromis Praktikant
21. juli 2010 - 22:29 #7
Time er forresten sat som INT
Avatar billede jakobdo Ekspert
21. juli 2010 - 22:32 #8
Prøv at vis din sql.
Avatar billede apromis Praktikant
21. juli 2010 - 22:35 #9
$query = mysql_query("SELECT SUM(vaerdi1) as v1, SUM(vaerdi2) as v2, SUM(vaerdi3) as v3, SUM(vaerdi4) as v4 FROM data WHERE Time BETWEEN $start AND $slut");
$row = mysql_fetch_assoc($query);
echo $row['v1'];

Har også prøvet denne

$query = mysql_query("SELECT SUM(vaerdi1) as v1, SUM(vaerdi2) as v2, SUM(vaerdi3) as v3, SUM(vaerdi4) as v4 FROM data WHERE Time >= $start AND $end <= Time");
$row = mysql_fetch_assoc($query);
echo $row['v1'];
Avatar billede jakobdo Ekspert
21. juli 2010 - 22:46 #10
Der er jo forskel på $end og $slut
Avatar billede apromis Praktikant
21. juli 2010 - 22:49 #11
Den har jeg forresten rettet inden.
Det ikke det som fejler.
Skal jeg poste hele koden ? :)
Avatar billede apromis Praktikant
21. juli 2010 - 22:51 #12
Hov du har sku ret.
Den virker nu :)
Avatar billede apromis Praktikant
21. juli 2010 - 22:53 #13
Den anden sql sætning skal laves lidt smart

Kunne være løst således :
$query = mysql_query("SELECT SUM(vaerdi1) as v1, SUM(vaerdi2) as v2, SUM(vaerdi3) as v3, SUM(vaerdi4) as v4 FROM data WHERE Time >= $start AND $end <= Time and Sammenh = 1");
Udskriv kode

$query = mysql_query("SELECT SUM(vaerdi1) as v1, SUM(vaerdi2) as v2, SUM(vaerdi3) as v3, SUM(vaerdi4) as v4 FROM data WHERE Time >= $start AND $end <= Time and Sammenh = 2");

Osv op til 7. Men vil gerne have en smart sætning i stedet.
Forstår du mig ?
Avatar billede jakobdo Ekspert
22. juli 2010 - 08:06 #14
SELECT sammenh, SUM(vaerdi1) as v1, SUM(vaerdi2) as v2, SUM(vaerdi3) as v3, SUM(vaerdi4) as v4 FROM data WHERE Time >= $start AND $end <= Time GROUP BY sammenh
Avatar billede apromis Praktikant
23. juli 2010 - 19:42 #15
Lyder vist perfekt :)
Hvordan udskriver jeg saa vaerdierne
Avatar billede apromis Praktikant
26. juli 2010 - 14:02 #16
Bare svar og jeg opretter det andet spørgsmål i et nyt :)
Avatar billede jakobdo Ekspert
02. august 2010 - 13:50 #17
Svar!

Og du bør kunne udtrække værdierne via en "almindelig":

$q = mysql_query("SELECT sammenh, SUM(vaerdi1) as v1, SUM(vaerdi2) as v2, SUM(vaerdi3) as v3, SUM(vaerdi4) as v4 FROM data WHERE Time >= $start AND $end <= Time GROUP BY sammenh;");

while($r = mysql_fetch_assoc($q)){
echo $r['v1'].'<br />';
echo $r['v2'].'<br />';
echo $r['v3'].'<br />';
echo $r['v4'].'<hr />';
}
Avatar billede apromis Praktikant
02. august 2010 - 15:23 #18
Selvfølige, tak for hjælpen :)
Avatar billede jakobdo Ekspert
02. august 2010 - 15:41 #19
Takker for point.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester