---
title: "Slå ihop värden"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/16193-slå-ihop-värden"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "Web-Tor"
published: "2001-10-12T09:33:00.000Z"
updated: "2001-10-15T11:27:00.000Z"
replies: 21
views: 455
page: 1
pages: 2
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/16193-slå-ihop-värden"
---

# Slå ihop värden

_Sida 1 av 2._

## #1 — Web-Tor, 2001-10-12T09:33Z

I en tabell har jag tre kolumner: Avdelning , Vecka och Status 

Varannan vecka rapporterar varje avdelning sin status.

Nu vill jag få ut statusens medelvärde för varje vecka.

**Ett exempel:**
Vecka 12 rapporterar avdelning **A** en status på 50 och samma vecka rapporterar avdelning **B** en status på 100.

Det jag vill få fram är helt enkelt: **Medelvärdet för vecka 12 är 75**

Men hur gör jag för att få fram det?

Permalänk: https://www.webforum.nu/p/16193

## #2 — LarsG, 2001-10-12T09:42Z

```
select vecka,avg(status) from tabellen
 group by vecka
```

Du får kanske lägga in någon konvertering beroende på vilken typ du vill ha på resultatet. (Ser lite olika ut beroende på DBMS också.)

Red: detta tar fram avg för alla veckor, om du bara vill ha för en viss vecka

```
select avg(status) from tabellen 
where vecka = 12
```

Permalänk: https://www.webforum.nu/p/324340

## #3 — Web-Tor, 2001-10-12T10:52Z

Det var en variant som jag inte tänkt på. :)

Grejen är att jag inte vet hur många veckor det finns i databasen och det kan bli ganska många och då blir det ju en väldig massa frågor till databasen.

Jag hade tänkt mig ett sätt så att jag kan hämta all data från databasen och sedan räkna ut medelvärdet för varje vecka.

Någon lösning på det också?

Permalänk: https://www.webforum.nu/p/324341

## #4 — LarsG, 2001-10-12T11:02Z

> Jag hade tänkt mig ett sätt så att jag kan hämta all data från databasen och sedan räkna ut medelvärdet för varje vecka.

Den första frågan,den med group by, räknar ut snittet för alla veckor. 

Du kan ju använda den genomgående och sätta villkor på vecka om du vill begränsa urvalet.

Permalänk: https://www.webforum.nu/p/324342

## #5 — Web-Tor, 2001-10-12T11:22Z

Jag skulle behöva lite mer kod för att fatta hur du menar.

Hur få ut nåt vettigt från:

```
$result = mysql_query ("SELECT avg(Status) from tabell WHERE Vecka='12'");
```

Permalänk: https://www.webforum.nu/p/324343

## #6 — LarsG, 2001-10-12T11:28Z

Om du ställer den frågan så blir det bara en post som resultat.

```
$result = mysql_query ("SELECT avg(Status) as snitt from tabell WHERE Vecka='12'");

$row = mysql_fetch_array($result);
echo Snittet för vecka 12 är " . $row["snitt"] . "timmar <br>";
```

Däremot om du har 

```
$result = mysql_query ("SELECT vecka,avg(Status) as snitt from tabell group by vecka");

while ($row = mysql_fetch_array($result)) {
echo Snittet för vecka " . $row["vecka"] . " är " . $row["snitt"] . "timmar <br>";
}
```

så får du en post per vecka.

Permalänk: https://www.webforum.nu/p/324344

## #7 — Web-Tor, 2001-10-12T11:38Z

Jag får "parse error" på raden som börjar på **echo** :q

Permalänk: https://www.webforum.nu/p/324345

## #8 — SDCd, 2001-10-12T11:50Z

Saknas en " framför Snittet, tycker jag det ser ut som.

Permalänk: https://www.webforum.nu/p/324346

## #9 — Web-Tor, 2001-10-12T12:08Z

Det första man blir blind på är ögonen. ;) :x

Permalänk: https://www.webforum.nu/p/324347

## #10 — Web-Tor, 2001-10-12T13:03Z

Det funkar precis som jag vill nu men jag skulle behöva en grej till.

Om det blir väldigt många veckor skulle jag vilja dela upp det så att det bara visas typ 20 veckor åt gången.

Kan man använda detta som utgångspunkt kanske: <http://cgi.webforum.nu/wf/Forum12/HTML/000457.html>  :q

Permalänk: https://www.webforum.nu/p/324348

## #11 — LarsG, 2001-10-12T13:47Z

Det gick lite för fort där i mitt förra inlägg, men det ordnade sig.

Limit och order by borde vara alldeles utmärkt för paging

Skicka sidnummer med querystring

```
//räkna ut antal sidor
  $sql = "select count(distinct vecka) as veckor from tabellen";
//...
  if (!isset($pageno)) $pageno = 1;
  if ( $pageno == "" ) $pageno = 1;
  $pagesize = 20;
  $offset = $pagesize*($pageno-1);
  $sql = "SELECT vecka,avg(Status) as snitt from tabell group by vecka order by vecka limit $offset,$pagesize");
//etc
```

Permalänk: https://www.webforum.nu/p/324349

## #12 — Web-Tor, 2001-10-13T14:18Z

**Tack Lars!**
Det funkar bra.
Jag återkommer säkert senare när jag stött på nya problem. :)

Permalänk: https://www.webforum.nu/p/324350

## #13 — Web-Tor, 2001-10-14T12:04Z

Nya problem. :(

Som det är nu så står det **Välj sida \[1, 2, 3, 4\]** längst ner på sidan.

Jag skulle vilja att det stod **Välj intervall \[ 10-20, 21-30, 31-40\]**

??? :q

Permalänk: https://www.webforum.nu/p/324351

## #14 — spango, 2001-10-14T12:54Z

Typ...

```
// förutsättningar:
// $pagesize = antal grejer per sida
// $antal = antal tillgängliga grejer
// $pageno = nuvarande sida
for($i = 1; $i <= ((int)($antal / $pagesize)) + 1; $i++){
	if($i != 1)
		echo ", ";
	$lo = (($i - 1) * $pagesize) + 1;
	$hi = $i * $pagesize;
	if($hi > $antal)
		$hi = $antal;
	$linkDescription = "$lo-$hi";
	if($i == $pageno)
		echo $linkDescription;
	else
		echo "<a href='$PHP_SELF?pageno=$i'>$linkDescription</a>";
}
```

Permalänk: https://www.webforum.nu/p/324352

## #15 — Web-Tor, 2001-10-14T13:12Z

Nästan Spango ;)

Jag skulle vilja att det var veckonumnet som stod i länken.

Ett exempel:
Första veckan är 130 (vecka 30 år 2001) och sista vecka 146.

Vi visar 10 veckor per sida.

Länken skall då bli **Välj intervall \[ 130-139, 140-146 \]**

Jag har en array där alla veckorna ligger om det kan vara till någon hjälp. ;)

Permalänk: https://www.webforum.nu/p/324353

## #16 — spango, 2001-10-14T22:18Z

Det är inte "min dag" i den här tråden :) 
Jag skulle förslå en viss omstrukturering... stoppa in den första veckan du vill visa info för i querystring-variabeln first_display, så att foo.php?first_display=141 visar veckorna 141 till 150, eller något.

```
define('STEP_WEEK', 10); // antal veckor per sida
$last_display = $first_display + STEP_WEEK - 1; // sista veckan att visa data för
$conn = mysql_connect('databasserver');
mysql_select_db('tors_databas');
$res = mysql_query('SELECT MIN(vecka) as first, MAX(vecka) AS last FROM tabell'); // plocka fram första resp. sista veckan
$row = mysql_fetch_assoc($res);
mysql_free_result($res);
define('FIRST_WEEK', $row['first']);
define('LAST_WEEK', $row['last']);

# steg 1: visa data
$weekAvgs = mysql_query("SELECT vecka, AVG(status) FROM tabell WHERE vecka BETWEEN $first_display[/red] AND $last_display", $conn);
while($row = mysql_fetch_assoc($weekAvgs)){
# skriv ut raden
}
mysql_free_result($weekAvgs);

mysql_close($conn);

# steg 2: skriv ut navigeringshjälp
for($i = FIRST_WEEK; $i <= LAST_WEEK; $i += STEP_WEEK){
if($i != FIRST_WEEK)
echo ', ';
$linkDesc = ($i == LAST_WEEK) ? $i : $i . '-' . min($i + STEP_WEEK - 1, LAST_WEEK);
if($i >= $first_display && $i <= $last_display)
echo $linkDesc;
else
echo "<a href='$PHP_SELF?first_display=$i'>$linkDesc</a>"
}
```

Typ ;)

Permalänk: https://www.webforum.nu/p/324354

## #17 — Web-Tor, 2001-10-15T06:50Z

Jag kan inte få den här raden att funka. 
Alla variabler som är med i fråga har rätt värde men det funkar inte ändå??? :x

```
$weekAvgs = mysql_query("SELECT vecka, AVG(status) FROM tabell WHERE vecka BETWEEN $first_display AND $last_display", $conn) or die ("Fel");
```

Permalänk: https://www.webforum.nu/p/324355

## #18 — SPiN, 2001-10-15T07:27Z

Vad får du för felmeddelande?

Jag har fått för mig att BETWEEN endast fungerar på SQL Server och i Access, och inte i MySQL. Ska kolla upp det åt dej, vänta lite... :)

Permalänk: https://www.webforum.nu/p/324356

## #19 — LarsG, 2001-10-15T07:27Z

Du saknar en group by vecka i sql-satsen.

```
$weekAvgs = mysql_query("SELECT vecka, AVG(status) FROM tabell WHERE vecka BETWEEN $first_display AND $last_display group by vecka", $conn) or die (mysql_error());
```

Permalänk: https://www.webforum.nu/p/324357

## #20 — SPiN, 2001-10-15T07:34Z

LarsG, han kan han! :o :)

Permalänk: https://www.webforum.nu/p/324358

---

Tråden på webben: https://www.webforum.nu/amne/php/16193-slå-ihop-värden  
Nästa sida: https://www.webforum.nu/amne/php/16193-slå-ihop-värden/page2.md
