» Poradna » Web a internet

Rada s MySQL

Odpovědět  |  Zobrazit bez stromu  |  Upozornit redakci  |  nových odpovědí: 5/5
 |   |  Linux Chrome 25.0.1364.160  |  [84.242.68.---]

Ahoj,potřeboval bych poradit s takovým problémem. Takže, mám MySQL databázi s údajema z meteostanice. Pak mám PHP stránku, která z toho ty data tahá a dělá statistiky. Teď zrovna dělám na sloupečku srážky. Abych to zestručnil, v prvním sloupci je datum a čas měření, v dalších ostatní naměřené hodnoty. Srážky se postupně přičítaji. Na základě toho jsem si udělal novou tabulku sloučením, kde mám v jednom sloupečku datum po dnech (1.2., 2.2., 3.2., ...) a v druhém sloupečku denní úhrn srážek pro ten den (10mm, 3.3mm, 0mm atd.) Nebyl problém vypočítat maximální srážky, ve který den, celkovou sumu atd. Teď ale bych chtěl ještě vypočítat nejdelší období "sucha" a "mokra". Řečeno jinak, nejvíc po sobě jdoucích nulových (sucho) a nenulových hodnot v daném období. A výstup ideálně jako počet dní trvání, začátek (datum), konec (datum) a v případě období deště ještě celkový úhrn za těch několik dní. Nevím ale jak to udělat. Zkoušel jsem to, ale jediné co mě napadlo bylo zřetězení tisíců různých IF, ELSE atd. a nakonec jsem se v tom uplně ztratil a stejně to nefungovalo. Občas ale existuje na první pohled třeba ne hned patrné elegantní řešení, proto se ptám vás jestli vás něco nenapadá jak to udělat. A jen doplním, ty data to klasicky čte po řádcích - dotaz na MySQL.

Odpovědi na otázku

 |   |  Linux Chrome 26.0.1410.63  |  [89.235.32.---]

V MySQL neumím (dělám v NoSQL).Napadlo mě (pokud to je v MySQL možné) procházet pomocí foru jednotlivá políčka odzhora dolů a pokud by byla nula (nebo sucho), tak by se hodnota proměnné $sucho ($sucho++;) zvýšila o jedna (a pokud ne, tak by $sucho=0). Pokaždé by se také do jiné proměnné ukládala nejvyšší hodnota $sucho jaká kdy byla(if($sucho>$obdobiSucha){$obdobisucha=$sucho;}) To by mělo fungovat, jen nevím, jestli se to tak dá vyřešit s MySQL ale snad ano. Pak si také můžeš určit co znamená sucho ($jesucho) a netestovat to na nulu ale na $jesucho (a to samé u mokra...)

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Linux Chrome 25.0.1364.160  |  [84.242.68.---]

Jo díky, no něco v tom smyslu mě napadlo, udělat novou proměnnou "true/false" jestli předchozí byla taky nula nebo ne a pak to přičítat, ale je to dost zmatený a těch IF a ELSE tam pak je hrozně moc. Myslel jsem jestli třeba by se to nedalo vyřešit nějak jednodušeji, navíc pak je problém ještě s ukládáním těch datumů.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Opera 9.80  |  [90.181.101.---]

tabulka se sumami je podle mně zbytečná - na to stačí pohled s GROUP BY a SUMdruhá úloha by šla řešit na úrovni SQLka, ale musl by to být MS SQL server - nad pohledem (viz.výše) bych použil CTE (common table expression)

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Linux Chrome 25.0.1364.160  |  [84.242.68.---]

Tak abych byl upřimný, tohle jsem moc nepochopil. Rád bych to nějak vyřešil pomocí MySQL klasicky. Mám sloupeček "Date" a sloupeček "Rain", v prvním 1.2, 2.2, 3.2, v druhém 0, 4, 3.8, 0, 0 a prostě potřebuju nějak zjistit vždy nejvíc po sobě jdoucích 0 a nejvíc po sobě jdoucích "ne 0", s datem vybraného období, např. nejdelší sucho 3.2-6.2, 3 dny, celkem 12mm.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Opera 9.80  |  [90.181.101.---]

co jste nepochopil ? pokud děláte s DB tak by jste to chápat měl...já znám "dospělé" databáze, MySQL ne, ale view http://dev.mysql.com/doc/refman/5.0/en/create-... a agregační funkce http://dev.mysql.com/doc/refman/5.0/en/group-b... to umí takypokud nemáte databázi ve které jde udělat rekurzívní dotaz tak budete muset při ukládání dat do vámi agregované denní tabuky napočítávat počet dní sucha/mokra přičtením jedničky z předchozího dne...to bývá ze zkušenosti nejlepší řešení než dělat dotazy dynamicky

Souhlasím  |  Nesouhlasím  |  Odpovědět

Související témata: Období, Elegantní řešení



Určitě si přečtěte



Aktuální číslo časopisu Computer

26 procesorů v důkladném testu

Zhodnotili jsme 18 bezdrátových reproduktorů

Jak fungují cash back služby?

Pohlídejte své děti na internetu