Autor | Zpráva | ||
---|---|---|---|
RobBob Profil |
#1 · Zasláno: 23. 8. 2016, 12:14:59
Ahoj všem jsem úplný nováček ve světě programování. Mám dotaz na způsob výběru dat z tabulky.
Struktura dat je sloupce : datum, okd03p20, okd02p10, okd02p30, msp05, msp15, msp35, oke19p20, oke19p25, oke19p35, oke19p55. jedná se o předpovědi jejichž hodnoty jsou číselné. Ve slopuci datum jsou hodnoty ve formátu datum a čas. Hodnoty v tabulce každou minutu přibývají a v aktuálním čase je u nejzazží budoucí hodnoty čas t+55minut. já bych potřeboval vytvořit dotaz, který by mi dal výsledek datum, hodnota v čase t+20min, hodnota v čase t+10min, hodnota v čase t+30min, hodnota v čase t+5min, hodnota v čase t+15min, hodnota v čase t+35min, hodnota v čase t+20min, hodnota v čase t+25min, hodnota v čase t+35min, hodnota v čase t+55min. Bohužel nebyl jsem tvůrcem kódu, jen se v něm tzv. hrabu z důvodů zjištění chyby v generování výsledku a nemožnosti kontaktovat programátora. Děkuji za jakoukoliv pomoc. |
||
Keeehi Profil |
#2 · Zasláno: 23. 8. 2016, 12:21:26
Mohl by jsi prosím dodat ukázková data? Třeba tak 5 řádků, abychom si to mohli lépe představit? Díky.
|
||
RobBob Profil |
#3 · Zasláno: 23. 8. 2016, 12:31:44
Keeehi:
Ahoj moc se v diskuzích také nevyznám, takže jsem udělal prntscr z heidsql a obrázek vložil na dropbox: www.dropbox.com/s/xr23nhdwktoiear/data.png?dl=0 |
||
RobBob Profil |
#4 · Zasláno: 23. 8. 2016, 14:37:45
zkusil jsem viz níže, ale myslím že to nebude dobré ani pro db a zároveň nejsme schopen výsledek spojit do jednoho pole. Nejsem bohužel programátor a co jsem hledal na netu měl jsem budď smůlu nebo špatně hledám.
$SQL = "select msp05 from prutok_predikce where datum='".$datum_predikce=date("Y-m-d H:i:s", strtotime($rs2->fields['datum']." +4 min"))."'"; $rs3tmp5 = $db['SSB']->Execute($SQL); $SQL = "select okd02p10 from prutok_predikce where datum='".$datum_predikce=date("Y-m-d H:i:s", strtotime($rs2->fields['datum']." +9 min"))."'"; $rs3tmp10 = $db['SSB']->Execute($SQL); $SQL = "select msp15 from prutok_predikce where datum='".$datum_predikce=date("Y-m-d H:i:s", strtotime($rs2->fields['datum']." +14 min"))."'"; $rs3tmp15 = $db['SSB']->Execute($SQL); $SQL = "select okd03p20, oke19p20 from prutok_predikce where datum='".$datum_predikce=date("Y-m-d H:i:s", strtotime($rs2->fields['datum']." +19 min"))."'"; $rs3tmp20 = $db['SSB']->Execute($SQL); $SQL = "select oke19p25 from prutok_predikce where datum='".$datum_predikce=date("Y-m-d H:i:s", strtotime($rs2->fields['datum']." +24 min"))."'"; $rs3tmp25 = $db['SSB']->Execute($SQL); $SQL = "select okd02p30 from prutok_predikce where datum='".$datum_predikce=date("Y-m-d H:i:s", strtotime($rs2->fields['datum']." +29 min"))."'"; $rs3tmp30 = $db['SSB']->Execute($SQL); $SQL = "select oke19p35, msp35 from prutok_predikce where datum='".$datum_predikce=date("Y-m-d H:i:s", strtotime($rs2->fields['datum']." +34 min"))."'"; $rs3tmp35 = $db['SSB']->Execute($SQL); $SQL = "select oke19p55 from prutok_predikce where datum='".$datum_predikce=date("Y-m-d H:i:s", strtotime($rs2->fields['datum']." +54 min"))."'"; $rs3tmp55 = $db['SSB']->Execute($SQL); |
||
Keeehi Profil |
#5 · Zasláno: 23. 8. 2016, 19:34:25
A ty chceš vrátit tabulku, kde budou uvedeny všechny hodnoty pro všechny senzory po pěti minutách, nebo tabulku s jedním řádkem a n sloupci kde n je počet senzorů a hodnota pro každý z těch senzorů bude z jiného času?
To první jde, to druhé jen velmi hnusně. |
||
RobBob Profil |
#6 · Zasláno: 23. 8. 2016, 21:05:10
Keeehi:
No právě že jako výsledek bych potřeboval to druhé. Vysvětlení: Programátor to měl tak, že generoval jen jeden řádek z tabulky "prutok_predikce" a to ten z aktualního data (času). Bohužel tím ale negeneroval předpovědi, ale hodnoty, které byly pro daný profil předpovídány v dřívějším čase. Např. pro 55minutovou předpověď před 55ti minutami. Tím celý předpovědní model ztrácí smysl. V zásadě bych potřeboval jeden řádek kde budou názvy predikcí a hodnoty v daných časových bodech. Ale jelikož jsem začátečník, tak jsem začal tak hnusně jak mám v kodu uvedeném výše. S tím že nějak vyseparuju jednotlivá pole a sloučím je do jednoho pole s názvy a hodnotami Dále není to vždy po pěti minutách ve skutečnosti od 5 do 35 po pěti minutách a dále už jen minutu 55 (vše plus k reálnému aktuálnímu času). V zásadě se tento script spouští každou minutu a mění hodnoty na obrazovce, kde lidé koukají na předpovědi pro jednotlivé profily. |
||
juriad Profil |
#7 · Zasláno: 23. 8. 2016, 21:29:15
Zase tak hnusné to není:
SELECT * FROM (SELECT msp05 FROM prutok_predikce WHERE datum = '$plusFourMinutes') p4 JOIN (SELECT ...) p9 JOIN (SELECT ...) p14 JOIN (SELECT okd03p20, oke19p20 FROM prutok_predikce WHERE ...) p19 ... JOIN (SELECT ...) p54 |
||
Martin2 Profil * |
#8 · Zasláno: 23. 8. 2016, 22:18:28
RobBob:
Vždy když název sloupce obsahuje číslo, je to neklamná známka špatného návrhu databáze. Ve tvém případě měla vzniknout další tabulka, která by obsahovala předpovědi a jejich vlastnosti (jako ten minutový offset). Pak by nebyl takový problém dělat různé agregační/matematické/statistické operace nad daty. |
||
RobBob Profil |
#9 · Zasláno: 24. 8. 2016, 07:48:32
Martin2:
Ahoj, jak jsem psal jsem úplný "začátečník" v zásadě tato tabulka existuje s názem profil_predikce_map, ale nejsou v ní jednotlivé offsety - ty bych tam byl schopen doplnit do dalšího sloupce. Spíše mi šlo o konstrukci dotazu SELECT a to teď mne napadají dva přístupy buď jeden select kde vyberu hromadu dat v čase 0 až do času t+55minut to jest asi 56 řádků * 11 sloupců, ze kterých budu potom dolovat ty data. Ale přiznám se že mám problém vytvořit z dotazu do databáze konkrétně z proměnné $rs něajké pole se kterým lze pracovat. |
||
Keeehi Profil |
#10 · Zasláno: 24. 8. 2016, 09:20:57
RobBob:
„jeden select kde vyberu hromadu dat v čase 0 až do času t+55minut to jest asi 56 řádků * 11 sloupců, ze kterých budu potom dolovat ty data“ Jak jsem psal, toto by šlo jednoduše. Filtrovat řádky není problém, takže by to bylo 12 řádků * 11 sloupců. |
||
RobBob Profil |
#11 · Zasláno: 24. 8. 2016, 09:42:44
Keeehi:
no v tuto chvíli jsem ve stadiu kdy si do proměnné vyberu data od času 0 po čas 55 a 11 sloupců. Ale přiznám se že neumím procházet pole tak abych vyzobal potřebné hodnoty z příslušných sloupců odpovídající konkrétnímu datu (času). Jaký cyklus na to použít? jedná se vlastně o dvourozměrné pole? |
||
RobBob Profil |
#12 · Zasláno: 25. 8. 2016, 10:02:00
Tak jeen abych to dovysvětlil udělal jsem to takjak je níže - je to určitě prasárna, chtěl jsem elegantněji, ale jak říkám nejsem programátor spíš takovej prznič kódu jednou za 3 roky :-(
$SQL = "select msp05 from prutok_predikce where datum='".$datum_predikce=date("Y-m-d H:i:s", strtotime($rs2->fields['datum']." +4 min"))."'"; $rs3tmp5 = $db['SSB']->Execute($SQL); //print_r($rs3tmp5); $SQL = "select okd02p10 from prutok_predikce where datum='".$datum_predikce=date("Y-m-d H:i:s", strtotime($rs2->fields['datum']." +9 min"))."'"; $rs3tmp10 = $db['SSB']->Execute($SQL); $SQL = "select msp15 from prutok_predikce where datum='".$datum_predikce=date("Y-m-d H:i:s", strtotime($rs2->fields['datum']." +14 min"))."'"; $rs3tmp15 = $db['SSB']->Execute($SQL); $SQL = "select okd03p20, oke19p20 from prutok_predikce where datum='".$datum_predikce=date("Y-m-d H:i:s", strtotime($rs2->fields['datum']." +19 min"))."'"; $rs3tmp20 = $db['SSB']->Execute($SQL); $SQL = "select oke19p25 from prutok_predikce where datum='".$datum_predikce=date("Y-m-d H:i:s", strtotime($rs2->fields['datum']." +24 min"))."'"; $rs3tmp25 = $db['SSB']->Execute($SQL); $SQL = "select okd02p30 from prutok_predikce where datum='".$datum_predikce=date("Y-m-d H:i:s", strtotime($rs2->fields['datum']." +29 min"))."'"; $rs3tmp30 = $db['SSB']->Execute($SQL); $SQL = "select oke19p35, msp35 from prutok_predikce where datum='".$datum_predikce=date("Y-m-d H:i:s", strtotime($rs2->fields['datum']." +34 min"))."'"; $rs3tmp35 = $db['SSB']->Execute($SQL); $SQL = "select oke19p55 from prutok_predikce where datum='".$datum_predikce=date("Y-m-d H:i:s", strtotime($rs2->fields['datum']." +54 min"))."'"; $rs3tmp55 = $db['SSB']->Execute($SQL); $pred['datum']= $datum; $pred['okd03p20']= $rs3tmp20 ->fields['okd03p20']; $pred['okd02p10']= $rs3tmp10 ->fields['okd02p10']; $pred['okd02p30']= $rs3tmp30 ->fields['okd02p30']; $pred['msp05']= $rs3tmp5 ->fields['msp05']; $pred['msp15']= $rs3tmp15 ->fields['msp15']; $pred['msp35']= $rs3tmp35 ->fields['msp35']; $pred["oke19p20"]= $rs3tmp20 ->fields['oke19p20']; $pred['oke19p25']= $rs3tmp25 ->fields['oke19p25']; $pred['oke19p35']= $rs3tmp35 ->fields['oke19p35']; $pred['oke19p55']= $rs3tmp55 ->fields['oke19p55']; |
||
Časová prodleva: 8 let
|
0