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

Requêtes MySQL Discussion :

Sélection de donnée par rapport à 1 date - 1 semaine


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 314
    Points : 98
    Points
    98
    Par défaut Sélection de donnée par rapport à 1 date - 1 semaine
    Bonsoir,

    j'ai une requête qui sélectionne toutes les informations en cours de validité.

    Le champ "datefin" correspond à la date de fin.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT idcp, idmcp, date, datefin, textecp, idm, nom, imagedevelopph FROM developph_marchands a, developph_marchands_cp b WHERE b.idmcp = a.idm and TO_DAYS( now( ) ) - TO_DAYS( b.datefin ) < 1 
    ORDER BY b.idcp DESC
    Je voudrais récupérer les informations qui ont été saisie dans la semaine et qui sont encore valident. Donc le champ "date" correspond à la date d'enregistrement de la donnée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT idcp, idmcp, date, datefin, textecp, idm, nom, imagedevelopph FROM developph_marchands a, developph_marchands_cp b WHERE b.idmcp = a.idm and TO_DAYS( now( ) ) - TO_DAYS( b.datefin ) < 1 
    and TO_DAYS( now( ) ) - INTERVAL 1 WEEK > date 
    ORDER BY b.idcp DESC
    J'ai rajouter le code en gras mais il ne fonctionne pas ...

    Pouvez vous me dire ou je me trompe ?

    Merci
    La vie à le gout qu'on lui donne

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 280
    Points : 11 736
    Points
    11 736
    Par défaut
    Tu te trompes parce que TO_DAYS renvoie le nombre de jours écoulés depuis le 1er janvier de l'an zéro ; ce n'est donc pas comparable avec ta colonne date qui est de type date.

    Ce que tu veux, c'est "la semaine en cours" ou "les sept derniers jours" ?
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 314
    Points : 98
    Points
    98
    Par défaut
    Bonjour,

    se serait plutôt de la semaine en cours.

    cela vous semble plus juste ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT idcp, idmcp, date, datefin, textecp, idm, nom, imagedevelopph
    FROM developph_marchands a, developph_marchands_cp b
    WHERE b.idmcp = a.idm
    AND TO_DAYS( now( ) ) - TO_DAYS( b.datefin ) <1
    AND now( ) - INTERVAL 1 WEEK > date
    ORDER BY b.idcp DESC
    Comment se serait pour les 7 derniers jours ?
    j'ai essayer cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT idcp, idmcp, date, datefin, textecp, idm, nom, imagedevelopph
    FROM developph_marchands a, developph_marchands_cp b
    WHERE b.idmcp = a.idm
    AND TO_DAYS( now( ) ) - TO_DAYS( b.datefin ) <1
    AND TO_DAYS( now( )) - INTERVAL 7 DAY > date
    ORDER BY b.idcp DESC
    mais cela ne me retourne rien.
    La vie à le gout qu'on lui donne

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 280
    Points : 11 736
    Points
    11 736
    Par défaut
    INTERVAL 1 WEEK et INTERVAL 7 DAY sont équivalents. La semaine en cours, cela veut dire "depuis le dernier lundi" ; pour trouver le dernier lundi, il faut retrancher 1 jour si on est mardi, 2 si on est mercredi, etc. :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where b.datefin >= curdate() - interval weekday(curdate()) day
    Pour les sept derniers jours, tu fais à nouveau l'erreur de comparer un TO_DAYS avec une date. Une syntaxe correcte serait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where b.datefin >= curdate() - interval 7 day ;
    Deux petites remarques :
    • CURDATE() est préférable à NOW(), qui vient compliquer les choses en ajoutant l'heure
    • pour optimiser la requête, il est préférable de mettre b.datefin tout seul d'un côté de l'opérateur de comparaison, et tous les calculs de l'autre ; cela permet à MySQL d'utiliser l'index (s'il y en a un, évidemment )
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 314
    Points : 98
    Points
    98
    Par défaut
    Ok ok ,
    Je trouve mon bonheur avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE b.datefin >= curdate() - interval 7 day ;

    Merci beaucoup.
    La vie à le gout qu'on lui donne

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

Discussions similaires

  1. ajout donnée par rapport date
    Par maximilien59 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 18/07/2011, 10h19
  2. [MySQL] affichage données par rapport à une date
    Par johan0510 dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 10/03/2010, 15h28
  3. Réponses: 4
    Dernier message: 22/01/2009, 13h43
  4. Regrouper les données par rapport à la date
    Par goldeagle dans le forum Access
    Réponses: 7
    Dernier message: 11/12/2006, 15h35
  5. [FLASH 8] Tri d'un dataGrid par rapport à la date
    Par aldo-tlse dans le forum Flash
    Réponses: 4
    Dernier message: 02/12/2005, 17h34

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