Ik zou uit een tabel de laatste 6 wijzigingen willen zoeken voor een DIY project.

Tabel Home_Inp
Kolom id, time, Inp_6, Inp_7

5035 , 2019-08-10 06:21:04 , 0 , 0
5036 , 2019-08-10 06:22:04 , 1 , 0
5037 , 2019-08-10 06:23:04 , 0 , 0
5038 , 2019-08-10 06:24:04 , 1 , 0
5039 , 2019-08-10 06:25:04 , 0 , 0
5040 , 2019-08-10 06:27:04 , 1 , 0
5041 , 2019-08-10 06:28:04 , 0 , 0
5042 , 2019-08-10 06:29:04 , 1 , 0
5043 , 2019-08-10 06:30:04 , 1 , 0
5044 , 2019-08-10 06:31:04 , 0 , 0
5045 , 2019-08-10 06:32:04 , 0 , 0
5046 , 2019-08-10 06:33:04 , 0 , 0
5047 , 2019-08-10 06:34:04 , 0 , 0
5048 , 2019-08-10 06:35:04 , 1 , 0
5049 , 2019-08-10 06:36:04 , 0 , 0
5050 , 2019-08-10 06:37:04 , 0 , 0
5051 , 2019-08-10 06:38:04 , 0 , 0
5062 , 2019-08-10 06:39:04 , 1 , 0
5053 , 2019-08-10 06:40:04 , 1 , 0
5054 , 2019-08-10 06:41:04 , 0 , 0



Resultaat zou dus iets zoals onderstaande moeten zijn


5035 , 2019-08-10 06:21:04 , 0 , 0
5036 , 2019-08-10 06:22:04 , 1 , 0
5037 , 2019-08-10 06:23:04 , 0 , 0
5038 , 2019-08-10 06:24:04 , 1 , 0
5039 , 2019-08-10 06:25:04 , 0 , 0
5040 , 2019-08-10 06:27:04 , 1 , 0
5041 , 2019-08-10 06:28:04 , 0 , 0
5042 , 2019-08-10 06:29:04 , 1 , 0
5043 , 2019-08-10 06:30:04 , 1 , 0
5044 , 2019-08-10 06:31:04 , 0 , 0
5045 , 2019-08-10 06:32:04 , 0 , 0
5046 , 2019-08-10 06:33:04 , 0 , 0
5047 , 2019-08-10 06:34:04 , 0 , 0
5048 , 2019-08-10 06:35:04 , 1 , 0
5049 , 2019-08-10 06:36:04 , 0 , 0
5050 , 2019-08-10 06:37:04 , 0 , 0
5051 , 2019-08-10 06:38:04 , 0 , 0
5062 , 2019-08-10 06:39:04 , 1 , 0
5053 , 2019-08-10 06:40:04 , 1 , 0
5054 , 2019-08-10 06:41:04 , 0 , 0

Ik had al onderstaande gevonden een aangepast maar het ik krijg het met mijn beperkte kennis niet in orde

select Home.time,Home.Inp_§
from (select Home_Inp.*,lag(Home_Inp.Inp_6) over(partition by name order by id) as prev_Inp_6
from Home_Inp
) l
where prev_Inp_6 <> Home_Inp.Inp_6
Het lijkt mij makkelijker om dit in PHP dynamisch te maken, in plaats van MySQL. En als je het dan toch ergens hard code dat het in tijdszone X moet zijn, dan kun je dat beter in PHP-code doen dan in SQL-code. Op het moment dat je dan toch tot het inzicht komt om dingen dynamisch(er) aan te pakken dan hoef je in ieder geval niet al je queries met datums/tijden erin na te lopen en/of om te schrijven...
Voor zover ik het nu zie. . .
Aan de database configuratie kan ik niets wijzigen.

als is SELECT CONVERT_TZ('2019-08-12 13:28:22','GMT','MET'); gebruik in het controle paneel van one.com krijg ik het juiste uur terug.

Alleen is het me niet duidelijk hoe ik dit moet integreren in mijn php pagina.


Dat moet je dan integreren in je SELECT-query, eerste argument is dan het veld van je UTC timestamp.
En als je nu eens PHP *altijd* de autoriteit laat zijn die bepaalt hoe laat het is? Dus in plaats van NOW() en andere MySQL-tijdfuncties gebruik je $_SERVER['REQUEST_TIME'] of iets soorgelijks (met de UTC tijdzone ingesteld uiteraard). Dan kun je alles al UTC de database in schieten.

Vervolgens maak je gebruik van de DateTime class om de conversie van UTC naar de gewenste tijdszone te maken op het moment dat je een datum/tijd wilt weergeven in een specifieke tijdszone. Dan heb je bovenstaande problematiek nooit en leg je op voorhand vast welke tijdszone de database gebruikt zodat je altijd hetzelfde uitgangspunt hebt. Daarnaast kun je dan je queries simpel houden zonder daar al (hard coded) conversies te doen.
Ik vrees dat ik meer hulp nodig heb.

In de kolom time wordt als standaard waarde CURRENT_TIME mee gegeven in de database.
Op deze manier moets de plc de tijd niet bij houden en was de tijd altijd juist.
Deze tijd wordt als utc in de database gestopt.

Alleen als ik ik die er nu uit haal zie ik niet hoe ik dat php gedeelte moet aan passen om daar ineens de juiste tijdzone (europe/brussels) mee te laten geven.




<?php
    $con=mysqli_connect("");
    $result = mysqli_query($con,'SELECT time, Inp_6 FROM Home_Inp WHERE Inp_6 IS NOT NULL ORDER BY time DESC LIMIT 3');
   
    while($row = mysqli_fetch_array($result))
    {      
        echo "<tr>";
        echo "<td>" . $row['time'] . "</td>";
        echo "<td>" . $row['Inp_6'] . "</td>";
        echo "</tr>";
    }
    mysqli_close($con);
?>
Je moet enkel de query aanpassen. Maar als timezones belangrijk zijn in je applicatie, dan is het beter om dit in de presentatielaag te doen i.p.v. de queries.
Dat krijg ik dus niet voor mekaar.

Ik heb als test er al eens de datum en tijd extra tussen gezet. Deze komt mooi van utc naar Europe/Brussels.
Maar de tijden uit de tabel time blijven utc zijn.
Ik vermoed dat hij dat gewoon als tekst bekijkt en daarom er de tijdzone correctie niet doet



<?php
    date_default_timezone_set('Europe/Brussels');
    echo date("D M d, Y G:i a");    
    $con=mysqli_connect("xxx";
    $result = mysqli_query($con,'SELECT time, Inp_6 FROM Home_Inp WHERE Inp_6 IS NOT NULL ORDER BY time DESC LIMIT 3');
    while($row = mysqli_fetch_array($result))
    {      
      
         echo "<tr>";
        echo "<td>" . $row['time'] . "</td>";
        echo "<td>" . $row['Inp_6'] . "</td>";
        
        echo "</tr>";
    }
           
    // Close the connection   
    mysqli_close($con);
?>
En als je
echo "<td>" . $row['time'] . "</td>";

verandert in
echo "<td>" . date("D M d, Y G:i a", $row['time']) . "</td>";
Het is niet dat ik er niet zelf wil achter zoeken maar ik zie het echt niet hoe ik dit moet gaan doen.
Ik heb een zeer kleine kennis van PHP en database, al wat ik tot nu toe gebruik komt van het internet en is aangepast naar wat ik nodig had. Dat van die tijd krijg ik dus niet zonder meer hulp in orde vrees ik.

Het is niet dat ik geen interesse heb om hier meer van te weten te komen maar dit is niet iets wat ik mijn dagelijks (of profeesioneel) leven gebruik. Mss iets om te leren als ik later van mijn pensioen kan genieten . . . maar dat is nog niet voor direct :-(

[size=xsmall]Toevoeging op 14/08/2019 09:32:05:[/size]


- SanThe - op 13/08/2019 21:40:18

En als je
echo "<td>" . $row['time'] . "</td>";

verandert in
echo "<td>" . date("D M d, Y G:i a", $row['time']) . "</td>";



Ondertussen ook eens getest.
Waarde 2019-08-14 06:12:08 in kolom time
geeft 1970 01 01 1:33 am in website (blijkbaar neemt die enkel die 2019?)


Nog eens gekeken van hoe die kolom in de database staat.

Naam Type Collatie Attributen Leeg Standaardwaarde Opmerking extra
time timestamp Nee current_Timestamp()

Reageren