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 :

afficher entre deux dates


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Mars 2009
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Mars 2009
    Messages : 190
    Par défaut afficher entre deux dates
    salut,
    je veux afficher tout ce qu'il y a entre deux dates choisies!
    normalement on faisait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from table where Date between date_debut='$date_debut' and date_fin='$date_fin'
    Mais dans mon cas j'ai pas le champs date j'ai seulement date_debut et date_fin,et je voulais afficher non juste ce qui egale les deux dates mais aussi tout qui entre dans cette intervalle!
    donc comment faire SVP ?
    Merci d'avance.

  2. #2
    Membre Expert
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Par défaut
    Bonjour,


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql= "SELECT * FROM matable WHERE monchampdate BETWEEN '".$date_debut."' AND '".$date_fin."'";

  3. #3
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    Salam; un conseil si vous permettez evite d'utilisé des noms de champs genre Date.... c'est des noms reservés au SGBD et sa risque de généré des conflits.
    + 1 lunette un between ferai l'affaire

  4. #4
    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 : 40
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    On pourrait avoir la structure de la table ?
    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]

  5. #5
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Mars 2009
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Mars 2009
    Messages : 190
    Par défaut
    Merci pour vos réponses.Mais comme j'ai noté en haut j'ai pas un champ avec lequel je vais cherché!j'ai que les dates d'intervalle.cad: date_debut et date_fin.

    Citation Envoyé par Celira Voir le message
    On pourrait avoir la structure de la table ?
    la structure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TABLE IF NOT EXISTS `Affecter` (
    `id_Affecter` int(11) NOT NULL AUTO_INCREMENT,
      `liste` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
      `dateAffectation` date NOT NULL,
      `region` varchar(200) COLLATE utf8_unicode_ci NOT NULL,
      `date_debut` date NOT NULL,
      `date_fin` date NOT NULL,
    )
    merci d'avance.

  6. #6
    Membre Expert
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Par défaut
    Citation Envoyé par xzéna Voir le message
    j'ai pas un champ avec lequel je vais cherché!j'ai que les dates d'intervalle.cad: date_debut et date_fin
    euh... c'est quoi alors le champ "dateAffectation" ?
    je crois deviner que tu te trompes sur la façon de procéder...

    D'après la table que tu nous décris, si la requête souhaitée est de connaitre les enregistrements dont la date d'affectation se situe entre deux date connues alors :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql= "SELECT * FROM Affecter WHERE dateAffectation BETWEEN '".$date_debut."' AND '".$date_fin."'";
    et dans ce cas, les champs date_debut et date_fin de la table sont inutiles.

    Si la requête souhaitée est de connaitre les enregistrements dont les champs date_debut sont inférieurs à la date du jour et les champs date_fin sont supérieurs à la date du jour alors :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql= "SELECT * FROM Affecter WHERE date_debut < CURDATE() and date_fin > CURDATE()";
    Si la requete souhaitée est de connaitre les enregistrements dont les champs date_debut sont supérieurs à une date donnée et les champs date_fin sont inférieurs à une date donnée alors :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql= "SELECT * FROM Affecter WHERE date_debut >= '".$date_debut."' and date_fin <= '".$date_fin."'";
    sinon, il est impossible de récupérer ces enregistrements si tu n'as pas de date à comparer (dans la table, et je ne te parle pas de date_debut et date_fin !!)

    un peu de doc sur les fonctions de date dans MySQL


  7. #7
    Membre éprouvé
    Homme Profil pro
    Développeur Full Stack
    Inscrit en
    Mai 2010
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Full Stack

    Informations forums :
    Inscription : Mai 2010
    Messages : 159
    Par défaut
    Bonjour,

    et si au lieu de faire cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from table where Date between date_debut='$date_debut' and date_fin='$date_fin'
    tu fais ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql="select * from table where ( date_debut <='".$date_debut."' OR date_fin >='".$date_fin."')"

  8. #8
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    Salam ; Franck31
    Code :
    Sélectionner tout - Visualiser dans une fenêtre à part

    $sql="select * from table where ( date_debut <='".$date_debut."' OR date_fin >='".$date_fin."')"
    je crois en matière d'optimisation de la rquête un between est plus rapide

  9. #9
    Membre Expert
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Par défaut
    Citation Envoyé par redoran Voir le message
    je crois en matière d'optimisation de la rquête un between est plus rapide
    sans doute, mais surtout, la requête n'est pas bonne : ici on récupère les éléments qui sont en dehors de la période voulue, et encore, l'opérateur OR fait que la requête va en fait ramener exactement l'inverse de ce que l'on veut obtenir. bref, les opérateurs sont dans le mauvais sens (inférieur, supérieur et comparaison)

    Clairement, un between est adapté.


  10. #10
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    Re ; +1 lunette
    j'ai pas lu toute la requête , mais vous avez raison surtout si on a une table conséquente en plus en web.

Discussions similaires

  1. [MySQL] afficher les données qui se trouvent entre deux dates
    Par abdelkarim_1987 dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 04/10/2013, 08h50
  2. [MySQL] mcal_list_events ou l'art d'afficher des évènements entre deux dates
    Par synopsis-france dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 12/02/2012, 07h56
  3. Réponses: 16
    Dernier message: 16/05/2008, 17h39
  4. afficher les dates comprisent entre deux dates
    Par hugobob dans le forum Langage SQL
    Réponses: 2
    Dernier message: 11/10/2006, 11h53
  5. condition pour afficher entre deux dates
    Par forbans dans le forum Access
    Réponses: 1
    Dernier message: 13/06/2006, 09h13

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