IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Vérifier qu'il ne manque pas de lignes dans une table [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Inscrit en
    Octobre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 10
    Par défaut Vérifier qu'il ne manque pas de lignes dans une table
    Bonjour à tous.
    Petit exposé de mon problème. J'ai un logiciel qui m'inscrit dans une base de donnée mysql les relevés de températures de différents capteurs.
    Ma table à la structure suivante :
    `DATETIME` datetime DEFAULT '0000-00-00 00:00:00',
    `8A000001C3A1E328` float DEFAULT NULL,
    `AC000001C3B40B28` float DEFAULT NULL,
    `4D000001C3AB5F28` float DEFAULT NULL.

    J'ai fais un petit script qui me permet de sélectionner les températures des capteurs voulus sur 24h, 1 moi, ect ... mais malheureusement celui ci ne se rend pas compte de si oui ou non il me manque des prises de mesures...

    Par exemple voici ce que l'on peu trouver dans ma base :

    ('2009-10-18 11:10:06', 21.25, 21.19, 11.5),
    ('2009-10-18 11:15:06', 21.25, 21.25, 11.44),
    ('2009-10-18 11:20:06', 21.13, 21.13, 11.56),
    ('2009-10-18 11:25:06', 21, 21.06, 11.69),
    ('2009-10-18 11:30:07', 20.81, 20.81, 11.75),
    ('2009-10-18 16:15:05', 20.63, 20.63, 11.75),
    ('2009-10-18 16:20:05', 20.69, 20.69, 11.69),
    ('2009-10-18 16:25:05', 20.75, 20.75, 11.75),

    De 11h30 à 16h15 il n'y a pas eu de mesure. J'aimerais alors compléter le résultat de la requête automatiquement en lui faisant insérer :
    ('2009-10-18 11:35', 0, 0, 0),
    ('2009-10-18 11:40', 0, 0, 0),
    ('2009-10-18 11:45', 0, 0, 0),
    ect ...

    Une idée de la façon dont je peux procéder ??

    Merci d'avance

  2. #2
    Membre Expert Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Par défaut
    est ce que le capteur peut indiquer une température de 0 degrés ?
    si oui il vaut mieux éviter d'utiliser les zéro pour l'absence de mesure et tu peux par exemple chercher les mesures manquantes au moment de l'affichage

  3. #3
    Membre régulier
    Inscrit en
    Octobre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 10
    Par défaut
    Salut nosferapti.
    Les capteurs peuvent effectivement prendre la valeur 0 donc il serait effectivement mieux d'avoir une valeur nulle. Après comme je présente le résultat de la requête sur un graphique il faut bien représenter le nul par quelque chose d'où l'idée du zéro (c'est en effet une valeur qui n'est pas appelée à être mesurée souvent).

    Un exemple pour chercher les mesures manquantes au moment de l'affichage ?

  4. #4
    Membre Expert Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Par défaut
    Citation Envoyé par paka23 Voir le message
    Un exemple pour chercher les mesures manquantes au moment de l'affichage ?
    au lieu de faire une boucle sur les résultats de la base de données, tu fais une boucle sur un compteur que tu incrémentes de 5 minutes et à chaque fois tu regardes si pour la date de ton compteur, tu as une valeur du capteur

  5. #5
    Membre régulier
    Inscrit en
    Octobre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 10
    Par défaut
    Re merci nosferapti.

    J'avais pas vu que tu m'avais répondu et m'étais creusé la tête entre temps pour voir comment faire la chose.

    Voici le résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    	$sql = "SELECT * FROM $table_logtemp WHERE DATETIME BETWEEN (NOW( ) - INTERVAL $select_bt) AND NOW( )";
    	$retour = mysql_query($sql);
    	if ($retour === FALSE){
    		echo "La requête SELECT a échoué.";
    		}
    	else {
     
    		//création repère dernière mesure
    		$année = date('Y');
    		$mois = date('m');
    		$jour = date('d');
    		$heure = date('H');
    		$minute = date('i');
    		$dixaine_minute = substr($minute, -2, 1);
    		$unité_minute = substr($minute, -1, 1);
    		if ($unité_minute < 5){
    			$unité_minute = 0;
    			}
    		else {
    			$unité_minute = 5;
    			}
    		$repère_temps = $année.'-'.$mois.'-'.$jour.' '.$heure.':'.$dixaine_minute.$unité_minute.':00';
    		$date = new DateTime($repère_temps);
     
    		$end_date = $date->format("Y-m-d H:i:s");
     
    		//création repères première mesure
    		$date = new DateTime($repère_temps);
    		$first_datetime1 = $date->modify("-".$select_bt);
    		$date = new DateTime($repère_temps);
    		$first_datetime2 = $date->modify("-".$select_bt." +10 second");
     
    		$first_date1 = $first_datetime1->format("Y-m-d H:i:s");
    		$first_date2 = $first_datetime2->format("Y-m-d H:i:s");	
     
    		$titre_graphique = "Du ".$first_date1." au ".$end_date;
     
    		while ($enreg = mysql_fetch_array($retour)){
     
    			while ($first_date2 < $enreg["DATETIME"]){
    				$axe_x[] = $first_date1;
    				for($x=0;$x<$nb_id_select;$x++){$data_{$x}[] = 0;}
    				$first_datetime1->modify("+5 minute");
    				$first_datetime2->modify("+5 minute");
    				$first_date1 = $first_datetime1->format("Y-m-d H:i:s");
    				$first_date2 = $first_datetime2->format("Y-m-d H:i:s");
    				}
     
    			$axe_x[] = $first_date1;
    			for($x=0;$x<$nb_id_select;$x++){
    				$data_{$x}[] = (floatval($enreg[$id_capteur_visu[$x]]));
    				}
    			$first_datetime1->modify("+5 minute");
    			$first_datetime2->modify("+5 minute");
    			$first_date1 = $first_datetime1->format("Y-m-d H:i:s");
    			$first_date2 = $first_datetime2->format("Y-m-d H:i:s");
    			}
    		}
    Voilou. Si ca peu servir à quelqu'un d'autre ou si quelqu'un à une écriture plus simple a proposer je suis preneur.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/02/2007, 09h17
  2. Ajout/Suppression dynamique des lignes dans une table
    Par codexomega dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 13/08/2005, 18h50
  3. Réponses: 8
    Dernier message: 20/06/2005, 15h10
  4. j'arrive pas a inserer dans une table vide
    Par djouahra.karim1 dans le forum Bases de données
    Réponses: 16
    Dernier message: 03/05/2005, 14h24
  5. N° de ligne dans une table triée ?
    Par andremarco dans le forum Langage SQL
    Réponses: 6
    Dernier message: 24/06/2004, 17h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo