Autor Zpráva
donny
Profil *
Dobrý deň,

Robím si taky malý systém a narazil na problém, ktorý podľa mňa spočíva v zlej štruktúre tabuľky. Tá tabuľka je súčasťou inej samostatnej aplikácie, na ktorú ja nemám vplyv a jej štruktúru nemôžem ovplyvniť, takže ten problém potrebujem vyriešiť pravdepodobne asi dotazom. Dotaz sa mi asi podarilo vymyslieť, len by som si potreboval overiť či tá logika a spôsob je ok, nakoľko z vytiahnutých dát to nejako neviem identifikovať.

Takže pre vysvetlenie, v dotyčnej tabuľke existuje stlpec "teploty", kde sú merania teplôt počas dňa oddelene bodkočiarkov. Meraní môže byť od 1 do x, pričom ale v prípade že tam je len jedna hodnota tak tam tá bordočiarka nie je. Ešte pre upresnenie, táto tabuľka sa generuje automaticky z prístroja na meranie, preto ju ja neviem nijako ovplyvniť.

Tabulka vyzera napr. takto
id | datum | stanica| teploty | 
1| 2012-09-01| 2 |11; 15; 30; 12
2| 2012-09-02| 1 |15; 19; 25; 22
3| 2012-09-02| 2 |14; 12; 15; 32
4| 2012-09-03| 3 |12; 18; 27
5| 2012-09-04| 2 |12

A ja by som potreboval vytiahnut s tejto tabulky dáta napr. zo stanice 2, kde hodnota v stlpci teploty ktorehokolvek merania bola 12. Po krátkom skúšaní a vymýšľaní som prišiel na dotaz tejto štruktúry:

select * from merania where stanica='2' and teploty REGEXP '12|12;'

Vyzerá to funkčne, ale ako som už písal z množstva dát s ktorými to pracuje sa to nedá identifikovať. Preto sa chcem spýtať či je tento dotaz spĺňa účel?

PS: Samozrejme ten dotaz sa bude vykonávať automaticky cez php, pravdepodobne cez formulár, ale to si viem doriešiť.
Kajman
Profil
A nemůžete si z téhle cizí tabulky data přetransformovat do vlastních tabulek se správnou strukturou? Pak mohou být dotazy svižnější.

V případě toho regexpu to bude spíše
regexp '(^|; )12($|;)'
aby nezlobily záporné teploty a hlednání např. teploty s hodnotou 2.
Joker
Profil
donny:
Jde o špatný návrh databáze, viz Více hodnot ve sloupci v FAQ.

Vzhledem k „táto tabuľka sa generuje automaticky z prístroja na meranie, preto ju ja neviem nijako ovplyvniť.“, šlo by alespoň třeba tu tabulku nepoužívat? Vyrobit jinou databázi s rozumným návrhem a data tam přenášet?

Ke zmíněnému regulárnímu výrazu, obecně to fungovat nebude, protože to najde jakýkoliv záznam, který má na konci 12. Konkrétně pokud testovaná hodnota bude pouze 12 a ne jiná, rozsah možných hodnot se vejde do -11 až +111 a naměřená hodnota nemůže být desetinné číslo, to fungovat může.
donny
Profil *
Joker:
To že sa jedná o zlý návrh tabuľky je mi jasné problém je ale to že toto nemám nastarosti ja, ale jeden "dôležitý" pomerne nepríjemný pán. Ja mám kompetencie (a prístupové práva) len na prácu z hodnotami.

Prenesenie dát by možné asi bolo, ale neviem, je to podľa vás účelnejšie? V takom prípade by som musel vyrobiť nejaký CRON, ktorý by mi tam pravidelne presypával všetky hodnoty. Mnou naznačená tabuľka je z pohľadu dát veľmi zjednodušená a za určitých (kritických) okolností tam môže meracia stanica nasypať aj 1 000 záznamov za deň.

Mne prišlo jednoduchšie spraviť dotaz ktorý to ošetrí.

Späť k tej mojej konštrukcii, cieľom je aby mi vrátil záznamy 1, 3 a 5 tj, tie kde je stanica 2 a teplota v tom reťazci má niekde 12 ako samostatne meranie (ale napr 123 by bola zlé)

Kajman

Pre upresnenie, jedná sa o merania materiálu v laboratóriu, pričom nie je možné aby hodnota merania bola záporná, prípadne aj desatinné čísla sú nepodstatné. Každopádne toto vaše riešenie je krajšie ale vráti vždy podstatne menej výsledkov, budem musieť nejako overiť či správne.

Ďakujem vám obom za Vaše reakcie

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