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 du Club
    Femme Profil pro
    Inscrit en
    Mars 2009
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Mars 2009
    Messages : 190
    Points : 63
    Points
    63
    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 chevronné
    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 : 55
    Localisation : France

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

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    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
    Points : 1 031
    Points
    1 031
    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 : 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
    On pourrait avoir la structure de la table ?

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 190
    Points : 63
    Points
    63
    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 chevronné
    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 : 55
    Localisation : France

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

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    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 actif
    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
    Points : 220
    Points
    220
    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
    Points : 1 031
    Points
    1 031
    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 chevronné
    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 : 55
    Localisation : France

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

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    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
    Points : 1 031
    Points
    1 031
    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, 09h50
  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, 08h56
  3. Réponses: 16
    Dernier message: 16/05/2008, 18h39
  4. afficher les dates comprisent entre deux dates
    Par hugobob dans le forum Langage SQL
    Réponses: 2
    Dernier message: 11/10/2006, 12h53
  5. condition pour afficher entre deux dates
    Par forbans dans le forum Access
    Réponses: 1
    Dernier message: 13/06/2006, 10h13

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