Page 1 sur 2

Obtenir une valeur en soustrayant les deux dernières valeurs

Posté : 27 août 2022, 11:49
par Javier
Bonjour à tous

J'écris ce message pour demander de l'aide.
C'est incroyable pour moi que je ne puisse pas le réparer moi-même.
Il s'agit des éléments suivants :

J'utilise le magnifique build NOAAsql :
http://kocher.es/NOAAsql/NOAA.php

Tout fonctionne parfaitement; eh bien, la table "noaa_jour" a un champ appelé "duree_jour_minutes".

Objectif:
Obtenir une valeur en soustrayant du dernier enregistrement du champ « duréee_jour_minutes », l'avant-dernière valeur de ce même champ.

J'ai juste tourné en rond sans trouver la solution

Je soupçonne que vous devez avoir une solution simple

Re: Obtenir une valeur en soustrayant les deux dernières valeurs

Posté : 01 sept. 2022, 09:17
par jturlier
Bonjour Javier,
que penses-tu de ça ?
select amj,( a.duree_jour_minutes -(select b.duree_jour_minutes from noaa_jour b where b.tstamp= (a.tstamp-86400) )) delta from noaa_jour a order by 1 desc;
Tu peux aussi, à partir de cette requête créer une VIEW.
Bien amicalement
Jean

Re: Obtenir une valeur en soustrayant les deux dernières valeurs

Posté : 01 sept. 2022, 09:38
par Javier
Bonjour jean

Merci beaucoup pour votre réponse et pour votre suggestion.
J'ai essayé votre "Select", dont le résultat fournit une liste de valeurs de toute la table.
Ladite liste commence le 11 juillet 2022 :

20200711 -2
20200710 -3
20200709 -3
20200708 -2
20200707 -2
20200706 -2
--------------------
et comprend l'ensemble du table.

Ce dont j'ai besoin est une valeur unique (mesurée en secondes) de la différence dans le champ "duréee_jour_minutes" du jour en cours par rapport au jour précédent.
Le but est de remplacer le "script":

http://kocher.es/weatherdisplay/duracion_dia_modif.php

qui a cessé de fonctionner correctement.

Merci beaucoup pour votre soutient


Javier

Re: Obtenir une valeur en soustrayant les deux dernières valeurs

Posté : 01 sept. 2022, 10:39
par jturlier
Re-bonjour Javier,
étant donné que les valeurs dans le champ durée-jour_minutes sont en minutes tu ne peux pas espérer obtenir des secondes en résultat à moins de multiplier par 60 !
Il faut donc que tu envisages d'utiliser autre chose pour résoudre ton problème si tu veux le résultat en secondes !
Là je n'ai pas de solution !!!

Re: Obtenir une valeur en soustrayant les deux dernières valeurs

Posté : 01 sept. 2022, 12:47
par Javier
Merci beaucoup Jean

il faudra penser à autre chose :D

Re: Obtenir une valeur en soustrayant les deux dernières valeurs

Posté : 03 sept. 2022, 16:06
par PascalWMR
Bonjour à tous

La solution de Jean est bonne, il suffit de multiplier le delta par 60 et de limiter le nombre d'enregistrement comme ceci

Code : Tout sélectionner

select amj,( a.duree_jour_minutes -(select b.duree_jour_minutes from noaa_jour b where b.tstamp= (a.tstamp-86400) ))*60 delta from noaa_jour a order by 1 desc LIMIT 1;
On a alors la différence de temps entre la durée du jour et celle du jours précédent en secondes :?: :?: :?:
A moins que ça ne soit pas cela que tu recherche Javier

A+
Pascal

Re: Obtenir une valeur en soustrayant les deux dernières valeurs

Posté : 03 sept. 2022, 16:22
par PascalWMR
Re
Javier a écrit :
01 sept. 2022, 09:38

Ce dont j'ai besoin est une valeur unique (mesurée en secondes) de la différence dans le champ "duréee_jour_minutes" du jour en cours par rapport au jour précédent.
Le but est de remplacer le "script":

http://kocher.es/weatherdisplay/duracion_dia_modif.php

qui a cessé de fonctionner correctement.
Au fait Javier, pourquoi le script à arrêté de fonctionner correctement?
N'utiliserait-il pas la fonction strftime() et ton site ne serait-il pas passé à PHP 8.1 ???

Auquel cas, strftime est devenu obsolète et n'est plus interprété. Il provoque même en erreur.
A la place, il faut utiliser la fonction IntlDateFormatter

A+
Pascal

Re: Obtenir une valeur en soustrayant les deux dernières valeurs

Posté : 03 sept. 2022, 20:18
par Javier
Salut Pascal

Merci pour votre intérêt (comme toujours) et pour votre commentaire.

Vous pouvez voir le code de la "page" à cette adresse :

https://kocher.es/weatherdisplay/duraci ... p?sce=view






Javier

Re: Obtenir une valeur en soustrayant les deux dernières valeurs

Posté : 04 sept. 2022, 15:13
par PascalWMR
Bonjour et bonjour Javier

Ton serveur tourne avec PHP 5.6.11 donc il ne devrait pas y avoir de problèmes de compatibilité.

Par contre, la variable $changeinday n'est définie nulle part sauf dans testtags.php ou effectivement elle a la valeur -00:00:01. C'est conforme à ce qui s'affiche -(0 Min 01 Seg)

J'ai essayé de debugger le script mais c'est compliqué car
  • je n'utilise pas Weather Display
  • il me manque les fichiers Settings.php et common.php
  • et le scripts doit être complètement réécrit car il utilise des fonctions obsolètes comme date_sunrise, date_sunset, strtotime(), strftime() qui ne fonctionnent plus sous PHP 8.1 que j'utilise.
  • la ligne 191 du script est buggée

    Code : Tout sélectionner

    $now  = mktime();
    le format de mktime est mktime(hour, minute, second, month, day, year)
Désolé de ne pouvoir faire plus

A+
Pascal

Re: Obtenir une valeur en soustrayant les deux dernières valeurs

Posté : 05 sept. 2022, 08:10
par Javier
bonjour Pascale

Comme on dit en Espagne : "Has dado en el clavo" :D

C'était exactement le problème:
Le chiffre de variation de la durée du jour est obtenu à partir du logiciel "WeatherDisplay" via le fichier "testtags.php".
Pour une raison inconnue, ledit logiciel (que je mets habituellement à jour) avait perdu les données de latitude et de longitude de ma position.
Dès que j'ai réussi à mettre à jour ces valeurs, la durée du jour (je pense) est correcte.

http://kocher.es/weatherdisplay/duracion_dia_modif.php

A aucun moment je n'ai pensé à cette complication ; Sans votre aide, je doute que je l'aurais réparé.

Merci beaucoup pour votre aide et votre sagacité, ami Pascal