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 :

comparaison de dates


Sujet :

PHP & Base de données

  1. #1
    Membre du Club Avatar de Casio
    Homme Profil pro
    Historien numérique
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Historien numérique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Points : 59
    Points
    59
    Par défaut comparaison de dates
    Salutations,

    J'ai un pb couillon sur des comparatifs de date d'une table MySQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $select = $connexion->query ("SELECT *, TO_DAYS( NOW( ) ) - TO_DAYS( `Saisie` ) > 15 AS last, TO_DAYS( NOW( ) ) - TO_DAYS( `Date` ) > 15 AS new, TO_DAYS( NOW( ) ) - TO_DAYS( `Date` ) > 30 AS hava, TO_DAYS( NOW( ) ) - TO_DAYS( `Date` ) > 60 AS med, TO_DAYS( NOW( ) ) - TO_DAYS( `Date` ) > 90 AS old, TO_DAYS( NOW( ) ) - TO_DAYS( `Date` ) > 120 AS megaold, TO_DAYS( NOW( ) ) - TO_DAYS( `DatRel` ) < 15 AS datrelnew, TO_DAYS( NOW( ) ) - TO_DAYS( `DatRel2` ) < 15 AS datrelnew2, TO_DAYS( NOW( ) ) - TO_DAYS( `DatTrans` ) < 15 AS dattransnew, TO_DAYS( NOW( ) ) > TO_DAYS( `Deadline` ) AS obsolete FROM $table WHERE `Actif` <> 'Non' ORDER BY Date ASC");
    Tout fonctionne bien pour l'ensemble, sauf pour "obsolete", dont voici le code PHP de vérification :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    elseif($data['Deadline'] != "" and $data['obsolete'] == 1) echo $data['Interet'] . "&nbsp;<a title=\"Annulation du d&eacute;barras (Date butoir depassee...).\" href=\"Apport/secure/app-suppr2.php?Id=" . $data['Id'] . " \" target=\"_blank\" onClick=\"javascript:history.go(0)\" class=\"adminlink\">X</a>";
    J'ai le cas de plusieurs dates dépasses, et le "X" ne s'affiche pas...

    Ca doit être rien, mais je butte depuis 30 minutes...

    Merci de votre aide.
    Digital self-made Man - OnLine since 1993.
    https://wda-fr.org - https://mathieu.charreyre.net

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Je vais poser la question évidente : tu as vérifié le résultat de ta requête (soit par un var_dump, soit en exécutant la requête directement sur la base via PhpMyAdmin ou assimilé) ?

    Sinon, pour avoir le même genre de condition que le reste de ta requête, tu peux essayer d'écrire sous la forme TO_DAYS( NOW( ) ) - TO_DAYS( `Deadline` ) > 0 AS obsolete.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,

    MySql possède déjà de fonctions pour calculer les intervalles de dates
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    DATEDIFF( NOW( ) ,`Saisie` ) > 15 AS last

    A+.

  4. #4
    Membre du Club Avatar de Casio
    Homme Profil pro
    Historien numérique
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Historien numérique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Points : 59
    Points
    59
    Par défaut
    Merci de vos aides...

    Comment puis-je faire avec un var_dump ?

    J'ai essayé donc avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TO_DAYS( NOW( ) ) - TO_DAYS( `Deadline` ) > 0 AS obsolete
    Mais cela ne fonctionne que si je mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    elseif($data['Deadline'] != "" and $data['obsolete'] == 0) (...)
    ensuite (==0).
    Et encore, cela n'affiche que sur le plus récent (24/02), pas celui qui a 1 an de décalage (03/2017).
    Digital self-made Man - OnLine since 1993.
    https://wda-fr.org - https://mathieu.charreyre.net

  5. #5
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Je n'ai pas bien compris ce que tu cherches à analyser.
    Mais si tes anciennetés calculées s'excluent les unes les autres, tu peux faire cette requête :

    Code sql : 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
    /*attention l'ordre est important*/
    select *,
    case
    	when DATEDIFF( NOW( ) ,`Deadline`) > 0  then 'obsolete'
    	when DATEDIFF( NOW( ) ,`Saisie` ) > 15 then 'last'
    	when DATEDIFF( NOW( ) ,`DatRel` ) < 15 then 'datrelnew'
    	when DATEDIFF( NOW( ) ,`DatRel2` ) < 15 then 'datrelnew2' 
    	when DATEDIFF( NOW( ) ,`DatTrans` ) < 15 then 'dattransnew'
    	when DATEDIFF( NOW( ) ,`Date` ) > 120 then 'megaold'
    	when DATEDIFF( NOW( ) ,`Date` ) > 90 then 'old'
    	when DATEDIFF( NOW( ) ,`Date` ) > 60 then 'med' 
    	when DATEDIFF( NOW( ) ,`Date` ) > 30 then 'hava'
    	when DATEDIFF( NOW( ) ,`Date` ) > 15 then 'new'
    end as anciennete	
    FROM ta_table
    WHERE `Actif` <> 'Non' 
    ORDER BY field(anciennete,'last','new','hava','med','old','megaold','dattransnew','datrelnew','datrelnew2','obsolete');
    Par ailleurs 2 remarques : 1) en SQL, on met tous les champs en minuscule.
    2) date est un mot réservé... alors n'oublie pas les `` quand tu convoques ce champ... le mieux étant d'éviter de nommer les champs par des noms réservés SQL.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Pour un var_dump, il te suffit d'ajouter une ligne var_dump($data); au début de ta boucle.
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while($data = $result->fetch()) {
        var_dump($data);
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

Discussions similaires

  1. Problème de comparaison de date
    Par trigone dans le forum Langage
    Réponses: 3
    Dernier message: 25/06/2008, 08h44
  2. problème de comparaison de date (si de différentes années)
    Par jamesleouf dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 23/05/2008, 11h20
  3. Problème sur comparaison de date
    Par Nixar dans le forum Langage SQL
    Réponses: 4
    Dernier message: 07/12/2007, 09h19
  4. Problème de comparaison de dates
    Par griese dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 13/07/2006, 16h35
  5. Problème de comparaison de dates
    Par MiJack dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/03/2004, 21h43

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