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

Langage PHP Discussion :

Requete mysql avec condition de date


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Consultant E-Business
    Inscrit en
    Août 2010
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant E-Business

    Informations forums :
    Inscription : Août 2010
    Messages : 216
    Points : 96
    Points
    96
    Par défaut Requete mysql avec condition de date
    Bonjour à tous,

    Je cherche à mettre en place une requête mysql avec un filtre par date mais je crains de mal m'y prendre.

    Voici ma requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $sqlQuery =
    			" SELECT ETABLISSEMENT_TYPE_URL, ETABLISSEMENT_ID, ETABLISSEMENT_URL_NAME, SOIREE_FRANCE_BILLET, SOIREE_FRANCE_BILLET_URL, EVENEMENT_SOUS_TYPE_LABEL, EVENEMENT_TYPE_URL, EVENEMENT_TYPE_URL, SOIREE_ID , EVENEMENT_TYPE_LABEL , SOIREE_TITLE , SOIREE_DESCRIPTION , DATE_FORMAT(SOIREE_DATE, '%d-%m-%Y') AS DATE , SOIREE_DATE_FIN , SOIREE_LIEU , SOIREE_PRIX , SOIREE_HEURE , SOIREE_URL_TITLE" .
    			" FROM SOIREE ".
    			" INNER JOIN EVENEMENT_TYPE ON EVENEMENT_TYPE.EVENEMENT_TYPE_ID = SOIREE_TYPE ".
    			" LEFT JOIN EVENEMENT_SOUS_TYPE ON SOIREE_SOUS_TYPE=EVENEMENT_SOUS_TYPE_ID".
    			" LEFT JOIN ETABLISSEMENT ON SOIREE_LIEU_ID=ETABLISSEMENT_ID".
    			" LEFT JOIN ETABLISSEMENT_TYPE ON ETABLISSEMENT_TYPE_ID=ETABLISSEMENT_TYPEID".
    			" WHERE ( SOIREE_SECTEUR = '$idSecteur' AND SOIREE_DATE BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 180 DAY) )".
    			" OR ( SOIREE_SECTEUR = '$idSecteur' AND DATE(mktime(0,0,0,$nbrTodayYear,$nbrTodayMonth,$nbrTodayDay)) )".
    			" ORDER BY SOIREE_DATE ASC "; 
    			$req = mysql_query($sqlQuery);
    			checkSqlError($sqlQuery);
    			$nbreligne = mysql_num_rows($req);
    			while($data = mysql_fetch_array ($req)) {
    Je veux faire un comparatif entre les dates dans ma base et la date provenant de mon url et afficher uniquement les dates d'un jour précis.
    Par exemple si je clique sur la date du 15 novembre 2010, je veux que ma requete regarde dans ma base s'il y a des choses a afficher concernant cette date sinon elle affichera tous les evenements sur 180 jours.

    Puis-je avoir un coup de main car à priori je ne m'y prends pas correctement.

    Merci par avance,

    Aurélien
    Salutations à tous les amis du forum Développez

    Monsieur GRrr, bulletins tranchants pour adultes consentants !

  2. #2
    Membre averti Avatar de bourvil
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    411
    Détails du profil
    Informations personnelles :
    Localisation : Israël

    Informations forums :
    Inscription : Juin 2002
    Messages : 411
    Points : 329
    Points
    329
    Par défaut
    Quel est le format de ta date ds ta base de donnees?
    timestamp ou datetime?

    Quel est le format de la date que tu recois de ton url?

    La fonction mktime est une function PHP non mysql, tu ne peux pas l'utiliser ds ta requete.

    Quelle erreur recois tu?
    Franchement, je suis capable du meilleur comme du pire, mais, dans le pire, c'est moi le meilleur.
    Coluche

  3. #3
    Membre régulier
    Homme Profil pro
    Consultant E-Business
    Inscrit en
    Août 2010
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant E-Business

    Informations forums :
    Inscription : Août 2010
    Messages : 216
    Points : 96
    Points
    96
    Par défaut
    Merci pour ta réponse.

    Le format date dans ma base est en datetime : yyyy-mm-dd
    Dans mon url je sépare jour, mois, année que je récupère grâce à mes get:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if(isSet($_GET['jour']))
    {
    	$nbrTodayDay = $_GET['jour'];
    }
    if(isSet($_GET['mois']))
    {
    	$nbrTodayMonth = $_GET['mois'];
    }
    if(isSet($_GET['annee']))
    {
    	$nbrTodayYear = $_GET['annee'];
    }
    Voici le message d'erreur que j'obtiens :
    FUNCTION nightfever1.mktime does not exist

    nightfever1 c'est le nom de ma base.

    Quelle pourrait-être la solution?
    De manière m'y prendre ?

    Merci pour ton aide,

    Aurélien
    Salutations à tous les amis du forum Développez

    Monsieur GRrr, bulletins tranchants pour adultes consentants !

  4. #4
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    Citation Envoyé par AurelienNF Voir le message
    Voici le message d'erreur que j'obtiens :
    FUNCTION nightfever1.mktime does not exist

    Quelle pourrait-être la solution?
    De manière m'y prendre ?
    Citation Envoyé par bourvil
    La fonction mktime est une function PHP non mysql, tu ne peux pas l'utiliser ds ta requete.

  5. #5
    Membre régulier
    Homme Profil pro
    Consultant E-Business
    Inscrit en
    Août 2010
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant E-Business

    Informations forums :
    Inscription : Août 2010
    Messages : 216
    Points : 96
    Points
    96
    Par défaut
    Merci Herode pour ta réponse.

    Puisque je ne peux pas utiliser mktime dans ma requete sql, de quelle manière dois-je m'y prendre pour faire un comparatif de date ?

    Merci par avance,

    Aurélien
    Salutations à tous les amis du forum Développez

    Monsieur GRrr, bulletins tranchants pour adultes consentants !

  6. #6
    Membre régulier
    Homme Profil pro
    Consultant E-Business
    Inscrit en
    Août 2010
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant E-Business

    Informations forums :
    Inscription : Août 2010
    Messages : 216
    Points : 96
    Points
    96
    Par défaut
    Je crois que j'ai compris.

    J'ai modifié ma requête mais ma condition ne fonctionne pas correctemement.

    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    " SELECT ETABLISSEMENT_TYPE_URL, ETABLISSEMENT_ID, ETABLISSEMENT_URL_NAME, SOIREE_FRANCE_BILLET, SOIREE_FRANCE_BILLET_URL, EVENEMENT_SOUS_TYPE_LABEL, EVENEMENT_TYPE_URL, EVENEMENT_TYPE_URL, SOIREE_ID , EVENEMENT_TYPE_LABEL , SOIREE_TITLE , SOIREE_DESCRIPTION , DATE_FORMAT(SOIREE_DATE, '%d-%m-%Y') AS DATE , SOIREE_DATE_FIN , SOIREE_LIEU , SOIREE_PRIX , SOIREE_HEURE , SOIREE_URL_TITLE" .
    			" FROM SOIREE ".
    			" INNER JOIN EVENEMENT_TYPE ON EVENEMENT_TYPE.EVENEMENT_TYPE_ID = SOIREE_TYPE ".
    			" LEFT JOIN EVENEMENT_SOUS_TYPE ON SOIREE_SOUS_TYPE=EVENEMENT_SOUS_TYPE_ID".
    			" LEFT JOIN ETABLISSEMENT ON SOIREE_LIEU_ID=ETABLISSEMENT_ID".
    			" LEFT JOIN ETABLISSEMENT_TYPE ON ETABLISSEMENT_TYPE_ID=ETABLISSEMENT_TYPEID".
    			" WHERE ( SOIREE_SECTEUR = '$idSecteur' AND SOIREE_DATE LIKE '$nbrTodayYear-$nbrTodayMonth-$nbrAgendaDay' )".
    			" OR ( SOIREE_SECTEUR = '$idSecteur' AND SOIREE_DATE BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 180 DAY) )".
    			" ORDER BY SOIREE_DATE ASC ";
    Ai-je inséré mon OR correctement car il m'affiche à chaque fois la condition avec l'intervalle de 180 jours et pas celle correspondant à la date ?
    Comment pallier à ce problème ?

    Merci par avance,

    Aurélien
    Salutations à tous les amis du forum Développez

    Monsieur GRrr, bulletins tranchants pour adultes consentants !

  7. #7
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    Si ton champ date est déclaré comme DATETIME, tu verras qu'il a des valeurs comme '2010-11-05 12:31:24'.

    Par conséquent, pour énoncer une condition sur ce champ, il faut prendre en considération toute la chaîne.

    Ex. : liste des lignes du 5 novembre 2010 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT * FROM table1
    WHERE unedate >= '2010-11-05 00:00:00' AND unedate <= '2010-11-05 23:59:59'
    Si tu n'as pas besoin des heures/minutes/secondes, utilise plutôt un format DATE.

    NB : tu peux aussi alléger ta clause en faisant une factorisation :
    (A & B) | (A & C) <=> A & (B | C)

  8. #8
    Membre régulier
    Homme Profil pro
    Consultant E-Business
    Inscrit en
    Août 2010
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant E-Business

    Informations forums :
    Inscription : Août 2010
    Messages : 216
    Points : 96
    Points
    96
    Par défaut
    Merci pour ta réponse.

    Excuse mon ignorance mais en tant que débutant je ne suis pas encore familiarisé avec tout le vocabulaire.
    Au vu de ton dernier post je suis en format DATE et non DATETIME

    Par contre ma condition OR dans ma requête te semble t'elle correcte ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    " WHERE ( SOIREE_SECTEUR = '$idSecteur' AND SOIREE_DATE LIKE '$nbrTodayYear-$nbrTodayMonth-$nbrAgendaDay' )".
    			" OR ( SOIREE_SECTEUR = '$idSecteur' AND SOIREE_DATE BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 180 DAY) )".
    Merci par avance,

    Aurélien
    Salutations à tous les amis du forum Développez

    Monsieur GRrr, bulletins tranchants pour adultes consentants !

  9. #9
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    Elle semble correcte en effet, sous réserve que les champs date soient bien au format DATE et que les différentes variables interpolées ($idSecteur etc.) aient des valeurs correctes.

  10. #10
    Membre régulier
    Homme Profil pro
    Consultant E-Business
    Inscrit en
    Août 2010
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant E-Business

    Informations forums :
    Inscription : Août 2010
    Messages : 216
    Points : 96
    Points
    96
    Par défaut
    Merci Herode pour ta réponse.

    J'ai utilisé au final des conditions dans mon code php ce qui a été beaucoup plus simple et ça fonctionne.

    Par contre ton indication suivante m'a permis de résoudre un autre problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT * FROM table1
    WHERE unedate >= '2010-11-05 00:00:00' AND unedate <= '2010-11-05 23:59:59'
    Encore un grand merci !!!

    Aurélien
    Salutations à tous les amis du forum Développez

    Monsieur GRrr, bulletins tranchants pour adultes consentants !

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

Discussions similaires

  1. [AC-2010] requete sql avec condition de dates
    Par Gerard.chery dans le forum VBA Access
    Réponses: 8
    Dernier message: 03/02/2014, 15h44
  2. [MySQL] requete mysql avec des dates
    Par esteban0013 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 11/10/2011, 11h23
  3. [MySQL] Requete MySQL avec condition => retourne champs vide
    Par spark_legion dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 02/08/2011, 14h00
  4. [Access] requete sql avec condition sur date
    Par qeja dans le forum Langage SQL
    Réponses: 4
    Dernier message: 25/03/2006, 23h54
  5. Probleme de requete SQL avec un champs date
    Par ju360modena dans le forum ASP
    Réponses: 5
    Dernier message: 16/06/2005, 11h18

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