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
Waar komt kolom 'name' vandaan (als je niet wilt partitioneren kun je dat deel ook gewoon weglaten - dus alleen "over (order by id)")?
Is het niet handiger om bij het opslaan al te checken of de situatie niet exact gelijk is aan de vorige waarde (en dus alleen maar wijzigingen op te slaan)?
Denk dat het het makkelijkste is om de vorige waarde redundant op te slaan in het huidige record. Wat indexen erop, en dan een WHERE conditie met inp_6 != inp_6_prev ofzo.
EDIT: actually, bereken het als je een nieuw record invoegt en sla dit op als een BOOLean, bijvoorbeeld inp_6_differs(_from_prev) ofzo. Nog makkelijker.
Ik heb ondertussen eea aan het bekijken geweest en kan het schrijven richting database wel aan passen zodat alleen de waarde die effectief aangepast wordt weggeschreven wordt
Zal er dan ongeveer als onderstaande komen uit zien
SELECT Id, time, Inp_6
FROM Home_Inp
WHERE Inp_6 IS NOT NULL
ORDER BY id DESC LIMIT 10
Heb ik alleen nog een probleem met de datum /tijd.
Deze datum en tijd wordt automatisch ingevuld bij het schrijven naar de database. Als ik die dus opvraag staat die niet in de juiste tijdzone. Voor zover nagevraagd bij one.com kan je de tijd van de database niet aan passen naar jou tijdzone.
Is er een mogelijkheid om bij het opvragen deze tijd toch nog aan te passen rekening houdende met mijn tijdzone en eventueel 'zomer / winter' tijd ?
Is er een standaard oplossing om de tijd in belgische tijd te krijgen?
</table>
<h1>Inputs</h1>
<table border="0" cellspacing="0" cellpadding="4">
<tr>
<td>Tijd </td>
<td>Input_6</td>
</tr>
<?php
// Connect to database
$con=mysqli_connect("host.mysql","_be","pwd","_be");
// Retrieve all records and display them
$result = mysqli_query($con,'SELECT time, Inp_6 FROM Home_Inp WHERE Inp_6 IS NOT NULL ORDER BY time DESC LIMIT 10');
// Process every record
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);
?>
</table>
Waarom zou je dit in je query willen regelen? Dit is een weergavekwestie. Het bovenstaande compliceert enkel je queries. Simpelweg omdat iets op SO staat wil dan zeggen dat dat de beste/makkelijkste oplossing is. Plus je zou dan al je queries met datums etc. zo moeten gaan aanpakken? Daar zou ik zelf noooooooooit aan beginnen.
Zoals gezegd: zorg dat je een vast uitgangspunt hebt (UTC) en datums en tijden altijd op die manier staan opgeslagen, dwing dit eventueel af door deze expliciet in te stellen via je connectie, of nog beter, als je hier bij kunt, in de configuratie op de database-server zelf. Vervolgens kun je in PHP wel van UTC naar je tijdszone-van-persoonlijke-voorkeur.
Ieder zijn mogelijkheid. Ikzelf heb het overigens diverse keren met tevredenheid toegepast. (Het is niet dat ik dit net opeens zomaar tegenkwam op SO).
Voornamelijk omdat het rekenen in MySQL juist gemakkelijker maakt. Of je dit nou in je queries moet frotten, of in je view, het is even veel werk.