Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Średnia dzienna z całego miesiaca.
Forum PHP.pl > Forum > Przedszkole
wojno
Witam

Szukam pomocy ze skryptem, zapytaniem SQL który wyświetlałby średnią dzienną z całego miesiąca.


Chciałbym uzyskać taką tabelę.
np:

| data | t1 | t2 | t3 | t4 |
-------------------------------------------------
| 01.01.2011 | 23.4 | 33.4 | 12.1 | 45.4 |
| 02.01.2011 | 23.4 | 33.4 | 12.1 | 45.4 |
| 03.01.2011 | 23.4 | 33.4 | 12.1 | 45.4 |
| 04.01.2011 | 23.4 | 33.4 | 12.1 | 45.4 |
...


Za wszelką okazaną pomoc z góry dziękuje.
Pozdrawiam




Dapi
  1.  
  2. $zapytanie = mysql_query("SELECT * FROM `tabela`");
  3. echo "<table>";
  4. while($wiersz = mysql_fetch_assoc($zapytanie)){
  5. echo "<tr><td>".$wiersz['data']."</td><td>".($wiersz['t1']+$wiersz['t2']+$wiersz['t3']+$wiersz['t4'])/4."</td></tr>";
  6. }
  7. echo "</table>";


O to chodzi?
mortus
@Dapi: Nie o to chodzi.

@wojno: Ale z czego chciałbyś taką tabelę uzyskać, bo pokazałeś nam dane wyjściowe, a nic nie wiemy o danych wejściowych. Rozumiem, że t1, to kolumna odpowiadająca 1 dniu w miesiącu, t2 drugiemu itd..., ale skąd wziąć do tego dane?
wojno
Dzięki za zainteresowanie.

t1,t2,t3,t4 - temperatury w bazie danych

Dziennie mam około 1440 rekordów

Chcę zrobić średnią całego dnia 1440 -> 23.4 - średnia 01.02.2011 dla temperatury t1, analogicznie dla t2,t3,t4.

Dane chce wyciągnąć z bazy do rysowania wykresu.
mortus
Ok, ale jak wygląda struktura tabeli, w której zapisujesz te 1440 rekordów?
wojno
Struktura obecnej bazy danych 03_222345

id | data | time | t1 | t2 | t3 | t4 | t5 | t6|
-----------------------------------------------

345 | 12.07.2011 | 18:04:31 | 94.3 | 32.4 | 34.3 | 12.4 | 0 | 0 |
346 | 12.07.2011 | 18:05:31 | 34.3 | 42.4 | 14.3 | 32.4 | 0 | 0 |
347 | 12.07.2011 | 18:06:31 | 24.3 | 32.4 | 34.3 | 32.4 | 0 | 0 |
348 | 12.07.2011 | 18:07:31 | 34.3 | 32.4 | 34.3 | 32.4 | 0 | 0 |
349 | 12.07.2011 | 18:08:31 | 14.3 | 32.4 | 14.3 | 12.4 | 0 | 0 |
350 | 12.07.2011 | 18:09:31 | 34.3 | 92.4 | 34.3 | 32.4 | 0 | 0 |


kawałeczek bazy danych
mortus
  1. SELECT `data`, AVG(`t1`) AS t1, AVG(`t2`) AS t2, AVG(`t3`) AS t3, AVG(`t4`) AS t4, AVG(`t5`) AS t5, AVG(`t6`) AS t6 FROM `03_222345` GROUP BY `data`
wojno
Coś nie działa, rekordy data sie powtarzają.

Zrobiłem coś takiego:

  1. SELECT DATA,
  2. format(avg(t1),1) AS T1,
  3. format(avg(t2),1) AS T2,
  4. format(avg(t3),1) AS T3,
  5. format(avg(t4),1) AS T4
  6. FROM 03_222345
  7. WHERE`data`LIKE'%01.02.2011%'



Problem ze wyświetla się tylko jeden rekord. Jak zrobić zeby wyświetlić kolejne dni.

muk4
A nie możesz zrobić
  1. $suma = 0;
  2. $i = 0;
  3. $data = '01.02.2011';
  4.  
  5. $res = mysql_query("SELECT `t1` FROM `03_222345` WHERE `data` = " . $data);
  6. while($t = mysql_fetch_assoc($res)){
  7. $suma += $t['t1'];
  8. $i++;
  9. }
  10. $srednia_t1 = $suma/$i;


Analogicznie dla reszty temperatur - dopisz sobie t2, t3... w zapytaniu i przy wyciąganiu danych.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.