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ů.
1$result = mysqli_query($dblink, "SELECT * FROM chart WHERE majitel='$requested_id' ORDER by time"); $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 |
#2 · Zasláno: 8. 1. 2020, 10:01:19
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 |
#4 · Zasláno: 8. 1. 2020, 10:11:20
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 |
#5 · Zasláno: 8. 1. 2020, 10:19:38
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 |
#6 · Zasláno: 8. 1. 2020, 10:27:15
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 |
#7 · Zasláno: 8. 1. 2020, 10:35:19
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 * |
#8 · Zasláno: 8. 1. 2020, 13:08:36
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 |
#9 · Zasláno: 8. 1. 2020, 13:20:00
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 |
#10 · Zasláno: 8. 1. 2020, 13:23:15
Průměrování zní dobře, ale tedy nevím, jak na to!
1$pocet_zaznamu = mysqli_num_rows(mysqli_query($dblink, "SELECT id FROM chart WHERE majitel=$id")); $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{
// ?????
} |
||
Časová prodleva: 5 let
|
Toto vlákno je staré, již dlouho do něj nikdo nepřispíval.
Informace a odkazy zde uváděné už nemusejí být aktuální. Nechcete-li řešit zde uvedenou konkrétní otázku, založte si vlastní vlákno, nepište do tohoto. Vložíte-li sem nyní příspěvek, upoutáte pozornost mnoha lidí a někteří z nich si jen kvůli vám přečtou i všechny předcházející příspěvky. Předpokládáte-li, že váš text skutečně bude hodnotný, stiskněte následující tlačítko:
Běda vám, jestli to bude blábol.
0