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 :

Calcul différence entre date


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2022
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2022
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Calcul différence entre date
    Bonjour à tous,

    Je suis webmaster et je travaille sur une application et je souhaite afficher pour toutes les lignes d'une table le délai de traitement de dossier qui est la différence entre deux champs dates. J'ai ecris le code mysql ci-dessous, mais il ne fonctionne pas. Puis je bénéficier du conseil ou d'accompagnement pour corriger ce code ?

    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
    <?php
    $mysqli = new mysqli("localhost", "root", "", "depcentrants");
    $mysqli->set_charset("utf8");
    $requete = "SELECT * FROM membre";
    $resultat = $mysqli->query($requete);
    $date_traitement = $resultat['date_bapteme'];
    $date_origine = $resultat['date_naiss'];
    $delai_reponse = $date_origine->diff($date_traitement);
     
     
    while ($ligne = $resultat->fetch_assoc()) {
    echo $ligne['matricule'] . ' - ' . $ligne['nom'] . ' - ' . $ligne['quartier'] . ' - ' . $ligne['telephone'] . ' - <b style="color:green;">' . $ligne['profession'] . '</b> - <b style="color:red;">' . $ligne['ville'] . '</b> - ' . $ligne['delai_reponse'] . '<br>';
    }
    $mysqli->close();
    ?>

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 311
    Points : 39 677
    Points
    39 677
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Plusieurs choses

    • SELECT * peut être utilisé dans une requête utilisée à la volée, mais il ne faut pas l'utiliser dans un traitement.
      En effet, si la description de la table ou de la vue change, SELECT * produira un résultat différent au risque de faire planter le traitement ou d'obtenir des résultats faux. De plus, SELECT * compromet l'usage d'index couvrants et pénalise donc les performances.
      Seule exception : dans le cas d'un test d'existence (NOT) EXISTS, on peut à la rigueur utiliser SELECT * (mais le risque est d'inciter les débutants à l'utiliser aussi dans d'autres contextes) ;
    • pour calculer la différence entre deux dates, il faut utiliser la fonction DATEDIFF(date1, date2) sous réserve bien sûr que les colonnes soient bien de type DATE ;
    • dans une table d'une base relationnelle, il n'y a pas de champs, il y a des colonnes. Les champs sont les zones d'un formulaire ou d'un état ;
    • pour améliorer la lisibilité de votre code, utilisez les balises CODE (symbole # de la bare d'icones), cette fois-ci je les ai ajoutées pour vous ;
    • et surtout, choisissez un titre parlant : "besoin d'aide" ne guide pas du tout les contributeurs...

  3. #3
    Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2022
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2022
    Messages : 4
    Points : 4
    Points
    4
    Par défaut accusé de réception
    Merci, j'ai bien reçu vos remarques.

  4. #4
    Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2022
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2022
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Afficher le résultat d'un DATEDIFF mysql
    Bonjour à tous,

    Je souhaite afficher à partir d'une base de donnée, le nom, le prénom (qui sont des colonnes dans la tables) et le nombre de jour entre la date de naissance et la date de baptême tous les deux étant également des colonnes de Type DATE. J'ai procédé en deux étapes :

    Etape 1 - Requête affichant les éléments de la base tels que nom, ..., en ligne.

    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
     
     
    <?php
    try
    {
        $bdd = new PDO('mysql:host=localhost;dbname=depcentrants', 'root', '');
    }
    catch(Exception $e)
    {
            die('Erreur : '.$e->getMessage());
    }
    $request= "SELECT nom FROM `membre` ";
    $reponse = $bdd->query($request);
    while ($donnees = $reponse->fetch())
    {
        echo $donnees['nom'] . '<br />';
    }
     
    $reponse->closeCursor();
    ?>
    Cette requête affiche bien le résultat ci dessous:
    Nom : resultat.png
Affichages : 144
Taille : 85,5 Ko


    Etape 2 : Afficher sur la même ligne le nom, ...., et la différence de jour entre la date de baptême et de naissance.

    Avec le code ci-dessous je voulais d'abord afficher pour tous les enregistrement de la table les différences en jour des deux dates, mais je n'y parviens pas. Ci-dessous mon code. L'objectif général est d'avoir un code comme dans la première étape qui affiche en ligne les noms, ..., et la différence de date.


    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
     
    <?php
    try
    {
        $bdd = new PDO('mysql:host=localhost;dbname=depcentrants', 'root', '');
    }
    catch(Exception $e)
    {
            die('Erreur : '.$e->getMessage());
    }
     
    $request= "SELECT DATEDIFF(day, date_bapteme,  date_naiss) AS date_diff FROM `membre` ";
    $reponse = $bdd->query($request);
    while ($donnees = $reponse->fetch())
    {
        echo $donnees['nom'] . '<br />';
    }
     
    $reponse->closeCursor();
    ?>
    Je reste en attente de vos réactions, je suis un amateur. Veuillez s'il vous plait proposer des codes ou corriger mon code.

  5. #5
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 365
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 365
    Points : 15 714
    Points
    15 714
    Par défaut
    dans la boucle while, affichez les données comme cela par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while ($donnees = $reponse->fetch())
    {
        var_export($donnees);
    }

  6. #6
    Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2022
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2022
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Afficher la différence entre deux date
    Merci pour la réaction, mais ca ne m'aide pas beaucoup. Ci après ce que le code recommandé donne:
    Nom : RESULT1.png
Affichages : 147
Taille : 459,1 Ko

    alors que j'ai déjà développé un code qui me donne tous les éléments que je souhaite afficher sauf la différence de date. Ci-après une illustration de ce que j'ai déjà, mais il me manque l'affichage de la différence de date telle que présenté dans la zone encerclée en rouge.
    Nom : RESULT2.png
Affichages : 153
Taille : 598,9 Ko

    Le code permettant le résultat ci-dessus le voici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?php
    		$mysqli = new mysqli("localhost", "root", "", "depcentrants");
    		$mysqli->set_charset("utf8");
    		$requete = "SELECT * FROM membre";
    		$resultat = $mysqli->query($requete); 
     
    		while ($ligne = $resultat->fetch_assoc()) {
    			echo $ligne['matricule'] . ' - ' . $ligne['nom'] . ' - ' . $ligne['quartier'] . ' - ' . $ligne['telephone'] . ' - <b style="color:green;">' . $ligne['profession'] . '</b> - <b style="color:red;">' . $ligne['ville'] . '</b> <br>';
    		}
    		$mysqli->close();
    		?>
    Comment y insérer un code permettant de faire la différence entre deux dates et afficher le résultat à la fin d'une ligne et pour tous les enregistrements?

  7. #7
    Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2022
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2022
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Afficher le résultat de DATEDIFF
    Re-bonjour,

    J'ai pu avancer dans mon code , mais je rencontre la difficulté de fusionner deux codes.

    1 - Le code 1 ci-dessous permet d'afficher pour tous les enregistrements de la table les colonnes souhaitées ( nom - téléphone - quartier - profession - ville)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?php
    		$mysqli = new mysqli("localhost", "root", "", "depcentrants");
    		$mysqli->set_charset("utf8");
    		$requete = "SELECT * FROM membre ";
    		$resultat = $mysqli->query($requete); 
     
    		while ($ligne = $resultat->fetch_assoc()) {
    			echo $ligne['matricule'] . ' - ' . $ligne['nom'] . ' - ' . $ligne['quartier'] . ' - ' . $ligne['telephone'] . ' - <b style="color:green;">' . $ligne['profession'] . '</b> - <b style="color:red;">' . $ligne['ville'] . '</b>  <br>';
    		}
    		$mysqli->close();
    		?>

    2 - Le code 2 ci-dessous permet d'afficher pour tous les enregistrements de la table la différence entre deux dates ( date_diff), pourtant notre souhait est d'afficher tous elements affichés par le code 1, auxquels doit s'ajouter le resultat du code 2. On devrait avoir ceci : nom - téléphone - quartier - profession - ville - date_diff

    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
     
    <?php
    try
    {
        $bdd = new PDO('mysql:host=localhost;dbname=depcentrants', 'root', '');
    }
    catch(Exception $e)
    {
            die('Erreur : '.$e->getMessage());
    }
    $request= "SELECT DATEDIFF( date_bapteme,  date_naiss) AS date_diff FROM `membre` ";
    $reponse = $bdd->query($request);
    while ($donnees = $reponse->fetch())
    {
    	echo $donnees['date_diff']. '<br>';
    }
     
    $reponse->closeCursor();
    ?>

    Comment fusionner ces deux codes?

  8. #8
    Membre éclairé
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2021
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juillet 2021
    Messages : 351
    Points : 719
    Points
    719
    Par défaut
    Bonjour,

    Il faut sélectionner toutes les données à afficher dans ta requête select :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $requete = "SELECT matricule, nom, quartier, telephone, profession, ville, DATEDIFF(date_bapteme, date_naiss) AS date_diff FROM membre";
    $resultat = $mysqli->query($requete); 
     
    while ($ligne = $resultat->fetch_assoc()) {
        echo $ligne['matricule'] . ' - ' . $ligne['nom'] . ' [quartier, telephone...] ' . $ligne['date_diff']:
    }

Discussions similaires

  1. besoin d'aide pour le composant DBComboBox
    Par jane2002 dans le forum Bases de données
    Réponses: 8
    Dernier message: 28/02/2004, 19h01
  2. Besoin d'aide avec postgresql sous windows NT
    Par Chihuahua dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 18/07/2003, 08h29
  3. [CR] besoin d'aide sur les formules
    Par GuillaumeDSA dans le forum Formules
    Réponses: 4
    Dernier message: 10/07/2003, 12h19
  4. [TP]besoin d'aide pour commandes inconnues
    Par Upal dans le forum Turbo Pascal
    Réponses: 15
    Dernier message: 03/10/2002, 10h48
  5. Besoin d'aide pour l'I.A. d'un puissance 4
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 17h05

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