Autor Zpráva
andynewcastleth
Profil
Představte si, že měřím venkovní teplotu každý den. Pokud uplyne 50 dnů můj graf bude mít 50 zobrazených bodů.

$result = mysqli_query($dblink, "SELECT * FROM chart WHERE majitel='$requested_id' ORDER by time");
        while ($row = mysqli_fetch_assoc($result)){
            //vykresli graf na zaklade $row[time] a $row[teplota]
        }

Problém nastane pokud jsem teplotu měřil poslední 10 let. To bych měl v grafu 3650 bodů.

Jak udělat, abych dostal jen maximálně 100 výsledků, které ovšem reprezentují dané časové období? (tj. že jsou mezi výsledky stejné vynechané díry)???
Kajman
Profil
Klikněte na SELECT ve svém příspěvku a podívete se tam na LIMIT.
andynewcastleth
Profil
Rozumíme si?

Já nechci zobrazit jen prvních 100 údajů. Já chci zobrazit 100 údajů v daném rozmezí.

Tady je můj problém v akci. Chci vykreslit identický graf, ale za pomocí méně bodů.

Tomášeek
Profil
andynewcastleth:
Sorry, ale co nechápeš na „Klikněte na SELECT ve svém příspěvku a podívete se tam na LIMIT.“?
Kajman
Profil
S těmi dírami jsem si nevšiml.

Pokud bude v logu teplot jedinečné id, které bude navazovat a nebude se promazávat, tak by mělo být nejrychlejší si zjistit minimální a maximálí id a pak si vygenerovat v php seznam 100 id, na které se zeptáte. Ale vypovídající hodnotu ten graf nebude mít žádnou, když tam budete mít třeba 3% bodů, co spolu nesouvisí (různá roční období).
andynewcastleth
Profil
Dotaz obsahuje WHERE majitel='$requested_id', takže v tabulce jsou údaje od mnoha a mnoha "snímačů teploty"....

Já myslím, že graf by to nijak nepoškodilo. Pokud se podíváme na graf nahoře a představíme si, že tam zůstane jen každý 3. bod, tak graf by pořád vypadal stejně/podobně....
Kajman
Profil
A když tam bude časem třeba každý 100. bod?

Máte verzi databáze umožňující window funkce? Mysql tuším od 8.0, MariaDB tuším od 10.2.
tttt
Profil *
Nechceš raději počítat průměry za dané období, místo bodu z něj? Rozdělil bych si časový interval na 100 stejných částí, spočítal, jak dlouho jedna trvá a pak napsal vhodnou podmínku do GROUP BY. Bude to něco jako ROUND(100 * (x - start) / (end - start))
Kajman
Profil
Když bude historie několika let, tak bych si dělal graf teplot za kalendářní rok. Klidně zazoomovaný jen na měsíc nebo čtvrtrok. Jedna linka poslední rok, dále pro orientaci linky s maximální, minimální, průměrnou teplotou pro dané datum. Ale z 1 vzorku za celý den to stejně je divné, když se během dne teplota výrazně mění.
andynewcastleth
Profil
Průměrování zní dobře, ale tedy nevím, jak na to!

$pocet_zaznamu = mysqli_num_rows(mysqli_query($dblink, "SELECT id FROM chart WHERE majitel=$id"));
if($pocet_zaznamu<100){

        $result = mysqli_query($dblink, "SELECT * FROM chart WHERE majitel='$requested_id' ORDER by time");
        while ($row = mysqli_fetch_assoc($result)){
            //vykresli graf na zaklade vsech $row[time] a $row[teplota]
        }

}else{

        // ?????
        
}

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0