21. juli 2010 - 21:01Der 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)
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 ?
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 ?
$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");
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";
$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'];
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 ?
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
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;");
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.