Autor Zpráva
RobBob
Profil
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
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
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
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
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
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
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 *
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
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
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
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
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']; 

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: