Hoogste en laagste waarden halen uit een tabel voor huidige datum

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Nol Versteeg

Nol Versteeg

12/07/2011 19:54:00
Quote Anchor link
Geacht Forum,
Ik ben geen softwareman maar als iemand mij een duw de juiste richting op kan sturen kom ik een heel eind.

Ik heb een database die iedere minuut groeit, uit deze database wil ik een tabel selekteren waar ik de hoogste en de laagste waarden uit haal, dit lukt met
"$sql9 = "SELECT * FROM `issdata` WHERE `ChannelIndex`=1\n"
. " ORDER BY `HiSolarRad` DESC\n"
. " LIMIT 0, 10";".

wat ik nu wil is alleen de hoogste waarde van de huidige dag van 0:00 tot 23:59.
Wat in de database aanwezig is is RecDateTime met datum en tijd in een tabel,en een channelIndex waar van ik channelindex 2 van moet hebben.

Ik hoop dat jullei een begin kunnen creeren.
Vriendeljike groet,
Nol Versteeg
 
PHP hulp

PHP hulp

24/12/2024 17:53:16
 
Kasper Heyndrickx

Kasper Heyndrickx

12/07/2011 20:01:33
 
Nol Versteeg

Nol Versteeg

12/07/2011 23:11:45
Quote Anchor link
Hallo Kasper,

Om de hoogste en laagste waarde uit de tabel te halen lukt wel , maar om in deze query de datum van vandaag er uit te halen iets met NOW() of met TODAY() lukt mij niet . Ik kan geen manier vinden om die ergens in de query te plaatsen.het kan zijn dat je eerst iets moet doen om de 1440 records van die dag te selecteren en daarna de hoogste en of de laagste waarde er uit te halen.

mvg Nol
 
- SanThe -

- SanThe -

12/07/2011 23:15:05
Quote Anchor link
CURDATE()
 
Nol Versteeg

Nol Versteeg

13/07/2011 18:55:42
Quote Anchor link
Hallo MySql/Php helpers,

Het een en ander is bijna gelukt in de query die in nu te zien krijg wordt er maar 1 record weergegeven tw. het eerste record van de huidige dag om 00.00uur dit zouden dus maximaal 1440 regels moeten zijn waaruit ik de hoogste of de laagste waarde haal. wat ik nu heb is:

$sql9 = "SELECT * FROM `issdata` WHERE 'RecDateTime'= CURDATE() AND `ChannelIndex`=1\n "
. " ORDER BY `HiSolarRad` DESC\n"
. " LIMIT 0, 10";

Wat wel is is dat RecDateTime bestaat uit datum en tijd. als ik deze ophaal laat hij wel alleen de datum zien.
Moet ik ergens nog iets meegeven om alle records van de huidige dag te laten zien.

mvg Nol
 
Noppes Homeland

Noppes Homeland

13/07/2011 19:10:54
Quote Anchor link
Neem eerst eens een kijkje in een SQL tutorial:
1. backticks horen niet thuis in sql
2. database, tabel en velden mogen op geen enkele manier gequote te worden
3. \n hoort ook niet thuis in sql
4. je moet niet onnodig gaan zitten plakken
5. als je DATETIME wilt vergelijken met een DATE dan moet je zorgen dat je twee gelijke typen krijgt en dat noemen we dan CAST-en

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
SELECT CAST(RecDateTime AS DATE) truncRecDateTime
,      MIN(HiSolarRad) MinHiSolarRad
,      MAX(HiSolarRad) MaxHiSolarRad
FROM   issdata
WHERE  ChannelIndex = 2
AND    CAST(RecDateTime AS DATE) = CURRENT_DATE
GROUP BY
       CAST(RecDateTime AS DATE)


Je gaat dus niet lopen jengelen met ORDER BY en LIMIT
 
Nol Versteeg

Nol Versteeg

13/07/2011 19:31:33
Quote Anchor link
Hallo Noppes,

Sorry dat ik aan het jengelen ben maar zoals ik al meedeelde ik ben geen softwareman en probeer mijn hobby uit te voeren met de benodigde software. Wat ik gedaan heb is in MySQL een query aangemaakt en dit laten vertalen naar PHP. dit zal een hele simpele manier zijn met het foute resultaat . en blijf proberen totdat het werkt met behulp van jullie kennis als dat mag.
Ik ga aan de gang met het script dat je voorgeschoteld hebt ,en ook kijken wat ik gedaan heb om verdere jengels uit te bannen.Je bent nooit te oud om te leren. 65
En als het een en ander werkt laat ik het weten.


mvg Nol
 
Noppes Homeland

Noppes Homeland

13/07/2011 19:52:19
Quote Anchor link
Jij jengelt niet, de query gaat "jengelen".
En als je een query (select-statement) maakt in MySql dan krijg je een VIEW, en dat heb je in dit geval niet

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
CREATE OR REPLACE VIEW mmTodayHiSolarRadVW
AS
SELECT CAST(RecDateTime AS DATE) truncRecDateTime
,      MIN(HiSolarRad) MinHiSolarRad
,      MAX(HiSolarRad) MaxHiSolarRad
FROM   issdata
WHERE  ChannelIndex = 2
AND    CAST(RecDateTime AS DATE) = CURRENT_DATE
GROUP BY
       CAST(RecDateTime AS DATE)

Als je dit doet dan verkijg je een view en dan kan je in php het volgende doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
$sql
= "
SELECT truncRecDateTime
,      MinHiSolarRad
,      MaxHiSolarRad
FROM   mmTodayHiSolarRadVW"
;

if (($result = mysql_query($sql)) !== false) {
    // geen while nodig de view zal altijd maar 1 record teruggeven
    $row = mysql_fetch_assoc($result);
    var_dump($row);
}

else {
    // op de slordige manier de fout weergeven
    // hier plaats je normaliter een alternatief voor als de query mocht mislukken

    echo '<pre>'.mysql_error().'<br />'.$sql.'</pre>';
}

?>
Gewijzigd op 13/07/2011 19:53:14 door Noppes Homeland
 
Nol Versteeg

Nol Versteeg

13/07/2011 21:18:03
Quote Anchor link
Hallo Noppes,

Dit gaat vast werken, ik heb in ieder geval iets om mee te stoeien en de schop in de juiste richting gehad .Het lijkt heel simpel maar voor een LEEK tussen '' is het een heel gedoe , ik bijt me er in vast . het is ook meer een uitdaging , een data logger die ik aangeschaft heb waar minimale software bij geleverd is , ik ben al een heel eind gevorderd.

nogmaals bedankt en ik zal de resultaten zeker op het forum laten weten.

groeten nolversteeg.

Toevoeging op 14/07/2011 14:13:48:

Hallo Noppes en mede Forumleden,
Er is een hele nieuwe wereld opengegaan met het voorbeeld, het was de duw in de juiste richting welke ik niet uit tutorials kan kan begrijpen. nu stap voor stap het geheel opgebouwd , en weet wat ik gedaan heb.en zeker ook bruikbaar voor de volgende stappen in SQL/PHP.

Deze tutorial mag gesloten worden
en nogmaals hartelijk dank.
groeten Nol Versteeg
 
Nol Versteeg

Nol Versteeg

22/07/2011 20:14:25
Quote Anchor link
Geachte forumleden,

De tutorial is open blijven staan, dus ik maak hier nog even gebruik van,de MIN MAX waarden van de Solar worden alleen maar MAX waarden gemeten vanaf 0:00 uur,ik hoop niet dat we dan nog zonnevermogen hebben. maar waar ik naar gekeken heb ,en daar kom ik nog niet uit is de tijd van de Max SolarRad.deze staat uiteraard in dezelfde Row. zo zal ik dat ook moeten doen met de UV want die hoeft niet altijd op dezelfde tijd Max te zijn. Hier kom je pas achter als je de zaak goed bekijkt.

Vraag is dus moet ik iets toevoegen met SELECT of moet ik een hele andere opzet van de database maken.
Vriendelijke groet,
Nol Versteeg.
 
Noppes Homeland

Noppes Homeland

22/07/2011 20:21:56
Quote Anchor link
Op een wazig verhaal kan geen antwoord gegeven worden.

Een duidelijk cijfermatig voorbeeld zal hoogst waarschijnlijk wonderen doen.
Dus wat staat er in de database en wat wil je als resultaat uit hebben.
 
Nol Versteeg

Nol Versteeg

22/07/2011 20:40:29
Quote Anchor link
Hallo Noppes,
Je had me al een heel eind op weg geholpen, maar in de database staat
RecDateTime 2011-07-12 17:21:00
HiSolarRad" 141 deze waarde veranderd dus naar gelang de zon schijnt.

Nu kan ik met het voorgaande script de Hoogste(MAX) waarde van die dag tevoorschijn halen. en ook gebruiken op de website. Wat nu ook zou moeten weten is de tijd wanneer die (MAX)waarde gemeten is.die zit dus in RecDateTime.

Dus HiSalarRad om XX:XX Uur.
Zo misschien iets duidelijker.
en bedankt voor de snelle reactie
Groeten Nol
 
Noppes Homeland

Noppes Homeland

22/07/2011 20:52:12
Quote Anchor link
Wel je hebt als het goed is de dag en de max van HiSolarRad

Hoe zal je dat dan in een sql-statement verwerken?
 
Nol Versteeg

Nol Versteeg

22/07/2011 22:02:12
Quote Anchor link
Hallo Noppes,

Dit is wat ik er van dacht, maar ik krijg hierbij de tijden van vandaag met hsolarRad) maar geen MaxSolarRad

CREATE OR REPLACE VIEW mmTodayHiVW
AS
SELECT CAST(RecDateTime AS TIME) truncRecDateTime (veld Tijd)
, MAX(HiSolarRad) MaxHiSolarRad (veld HiSolarRad)
FROM issdata
WHERE ChannelIndex = 1
AND CAST(RecDateTime AS DATE) = CURRENT_DATE (Huidige Dag)
GROUP BY
CAST(RecDateTime AS TIME) (en hier snap ik het Niet)

Of ga ik nu verder met het PHP script en is dit allen maar de vieuw
Groeten Nol
Gewijzigd op 22/07/2011 22:07:12 door Nol Versteeg
 
Noppes Homeland

Noppes Homeland

22/07/2011 22:55:12
Quote Anchor link
Ik had verwacht dat je met een hele simpele ordinaire query zal komen.

Dus doe het eens op de simpele manier
zonder max,group by
Gewijzigd op 22/07/2011 22:56:03 door Noppes Homeland
 
Nol Versteeg

Nol Versteeg

22/07/2011 23:19:00
Quote Anchor link
Hallo Noppes,

Dit is gedeeltelijk de query die jij aan het begin van deze sessy gegeven hebt en ben hier op aan het doorborduren. De HiSolarRad komt 1440 keer voor per dag en de hoogste waarde haal ik er uit met ,MAX(HiSolarRad) MaxHiSolarRad Aan deze waarde zit ook een tijd vast die ik er ook uit moet halen.

Op de webpagina zal het moeten worden Hoogste Zonne energie vandaag XXX W/m2 OM XX:XX Uur





Toevoeging op 23/07/2011 00:03:09:

Dit is de simpelste manier die ik verzonnen kan krijgen
maar dan moet wel de view mmtodayhivw veranderd worden

SELECT*
FROM`mmtodayhivw`
ORDERBY MaxHiSolarRad DESC
LIMIT 0 , 1
 
Noppes Homeland

Noppes Homeland

23/07/2011 12:07:55
Quote Anchor link
Dit:

SELECT CAST(RecDateTime AS DATE) truncRecDateTime
, MIN(HiSolarRad) MinHiSolarRad
, MAX(HiSolarRad) MaxHiSolarRad
FROM issdata
WHERE ChannelIndex = 2
AND CAST(RecDateTime AS DATE) = CURRENT_DATE
GROUP BY
CAST(RecDateTime AS DATE)

geeft jouw een 1ste resultaat, waarbij je weet de datum en de MaxHiSolarRad

Wat is er nu moelijk aan om iets in een volgende query te doen met dat resultaat? Je hebt in principe alleen nog maar de tijd nodig die behoort bij het resultaat uit je eerste query

WHERE CAST(RecDateTime AS DATE) = STR_TO_DATE(<datum resultaat uit eerste query>)
AND MaxHiSolarRad = <MaxHiSolarRad resultaat uit eerste query>


En als laatste kan je dan een poging doen om de 1ste query en de 2de query tot 1 query te maken
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.