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 :

Faire une recherche par DATE [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    593
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 593
    Points : 146
    Points
    146
    Par défaut Faire une recherche par DATE
    Bonjour à tous.

    Dans ma bdd "events" j'ai un champ "date" type Date YYYY-MM-DD.

    J'ai creer une page pour pourvoir faire des recherche par critéres dont la date.

    Afin de simplifier la tache à l'utilisateur j'ai séparé le select en 3 select :

    - 1 select pour le jours de 1 à 31
    - 1 select pour les mois : de 01 à 12
    - 1 select pour les années de 1950 à l'année en cours.

    en fait lorsque l'utilisateur sélectionnera les 3 select il n'y a pas de problemes.

    le probleme et que si il veut afficher les events de 2007 par exemple... la ma requete sql ne me renvoie rien....

    je sais pas comment procédé...

    voici ma requete actuelle:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if ($day=="" && $month="" && $years="")
    {
    $reponse = mysql_query("SELECT * FROM events WHERE Name LIKE '%$description%'  ORDER BY Date"); // Requête SQL 
    // Compte le nombre d'entrées que l'on va lister
    $req = mysql_query("SELECT COUNT(*) as nbr FROM events WHERE Name LIKE '%$description%' ");	  
    }
    else
    {			
    $reponse = mysql_query("SELECT * FROM events WHERE Name LIKE '%$description%' AND Date LIKE '%$date%' ORDER BY Date"); // Requête SQL 
    // Compte le nombre d'entrées que l'on va lister
    $req = mysql_query("SELECT COUNT(*) as nbr FROM events WHERE Name LIKE '%$description%' AND Date LIKE '%$date%' ");	  
    }
    je récupére mes valeurs comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // Récupération des données  	
    $description=$_POST['ISearchlastname']; 
    $day=$_POST['datedays'];
    $month=$_POST['datemonth'];
    $years=$_POST['dateyears'];
     
    $date= $years ."-". $month ."-" . $day ; // format : YYYY-MM-DD
    merci d'avance

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    Salut,

    regardes plutot dans la documentation de mysql. L'idée est de transformer à la volée la colonne DATE en YEAR.
    De souvenir la fonction doit s'appeler TO_YEAR ou YEAR tout court ?

    Après il faut simplement faire
    select *
    from nowhere
    where YEAR(ma_date) = '2007'

    !!! Ne fonctionne qu'avec des colonnes de type date !!!

    http://dev.mysql.com/doc/refman/5.0/...functions.html

    au passage, tu peux utiliser les opérateurs < > = <= >= avec les dates, ce qui est pratique pour faire des recherches. Au lieu de LIKE.

    a plus

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    593
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 593
    Points : 146
    Points
    146
    Par défaut
    au passage, tu peux utiliser les opérateurs < > = <= >= avec les dates, ce qui est pratique pour faire des recherches. Au lieu de LIKE.
    Oui j'ai testé cette solution avec un WHERE mais mon probleme surtout c'est de savoir si l'utilisateur a choisi le jour.. ou une année.. ou un mois et une année... ou ....

    Je pense que faire 20 if else n'est pas la solution... c'est pour cela que je demande un peu t'aide

    Merci

  4. #4
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 644
    Points
    4 644
    Par défaut
    salut,

    tu peux construite ta requête dynamiquement
    tu pars de la base
    si jour n'est pas vide, tu rajoutes ce critère à ta requête : day(date)
    si mois n'est pas vide, tu rajoutes ce critère à ta requête : month(date)
    ...

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    593
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 593
    Points : 146
    Points
    146
    Par défaut
    oki donc avec 3 conditions je devrais m'en sortir je vais regarder a cela.

    je vous tiens au courant

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    593
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 593
    Points : 146
    Points
    146
    Par défaut
    oki mais je me pose une question quand même :

    je suis arrivé a ceci :

    Code : 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    if ($day=="" && $month="" && $years="") // aucune date n'est définie donc on list tout.
    {
    $reponse = mysql_query("SELECT * FROM events WHERE Name LIKE '%$description%'  ORDER BY Date"); // Requête SQL 
    // Compte le nombre d'entrées que l'on va lister
    $req = mysql_query("SELECT COUNT(*) as nbr FROM events WHERE Name LIKE '%$description%' ");	  
    }
    else
    {	
    	if ($day!="")
    	{
    	je rajoute le champ day  
    		if ($month!="")
    		{
    		je rajoute day + month
     
    			if ($years!="")
    			{
    			je rajoute day + month + years
    			}
    			else
    			{
    			}
    		else
    		{ 
     
    		}
     
    	}
    	else
    	{
     
    	}
    }
    mais si le champ day n'est pas rempli mais le champ years oui il n'ira jamais jusque la fin de ma boucle... donc je suis obliger quand meme de tout tester... non ?

    Ou alors j'ai mal debuter mes conditions ?

  7. #7
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 644
    Points
    4 644
    Par défaut
    non,il faut construire ta requête comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $requete = "SELECT COUNT(*) as nbr FROM events WHERE Name LIKE '%$description%' ";
    si jour nest pas vide -> tu concate $requete avec $day(date)= ...
    si mois nest pas vide-> ....
    ....	
    $req = mysql_query("$requete");

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    593
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 593
    Points : 146
    Points
    146
    Par défaut
    j'ai trouver plus simple en fouillant le web :p

    Code : 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    if ($_POST['datedays']!="")
    {
    $day=$_POST['datedays'];
    }
    else
    {
    $day="%";
    }
     
    if ($_POST['datemonth']!="")
    {
    $month=$_POST['datemonth'];
    }
    else
    {
    $month="%";
    }   
     
    if ($_POST['dateyears']!="")
    {
    $years=$_POST['dateyears'];
    }
    else
    {
    $years="%";
    }  
     
    $date= $years ."-". $month ."-" . $day ; // format : YYYY-MM-DD
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $reponse = mysql_query("SELECT * FROM events WHERE Name LIKE '%$description%' AND Date LIKE '$date'  ORDER BY Date"); // Requête SQL 
    // Compte le nombre d'entrées que l'on va lister
    $req = mysql_query("SELECT COUNT(*) as nbr FROM events WHERE Name LIKE '%$description%' AND Date Like '$date'");

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

Discussions similaires

  1. [MySQL] Faire une recherche par la première lettre (ou chiffre) d'une liste
    Par Rowmanow dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 30/01/2011, 21h17
  2. Faire une recherche par date
    Par ghnawfal dans le forum JSF
    Réponses: 13
    Dernier message: 11/04/2008, 07h35
  3. [MySQL] Faire une recherche dans un tableau créer par mysql_fetch_array avec in_array
    Par arnaudperfect dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 12/11/2007, 15h13
  4. Faire une recherche par mot-clé
    Par Nelmo dans le forum Requêtes
    Réponses: 3
    Dernier message: 14/06/2006, 16h56
  5. Réponses: 4
    Dernier message: 26/05/2006, 11h39

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