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 :

lier 3 colonnes en une dans requete


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 60
    Points : 30
    Points
    30
    Par défaut lier 3 colonnes en une dans requete
    Bonjour à tous!!

    Voila mon probleme... J'ai cette table :

    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
     
    CREATE TABLE contacts (
      numero int(30) NOT NULL auto_increment,
      datemisejour date default NULL, 
      datearchivage date default NULL, 
      pac varchar(10),   
      client varchar(150),
      remarques varchar(70),
      nom varchar(25),  
      prenom varchar(25),
      anneedebut varchar(4),
      moisdebut varchar(2),
      jourdebut varchar(2),
      anneefin varchar(4),
      moisfin varchar(2),
      jourfin varchar(2),
      telephone varchar(30),
      email varchar(50),
      PRIMARY KEY  (numero),
        KEY numero (numero))
      TYPE=MyISAM;
    J'ai deux dates qui sont décomposée en jour,mois,année pour chacune. Je souhaite faire ensuite une requete qui me permet de selectionner certaines lignes selon des criteres rentrés précédemment dans un formulaire... voici ma requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	$requete="SELECT *
          FROM contacts
    	  WHERE datearchivage like '00%'
    	  AND pac like '$pac'
    	  AND client like '$client'
    	  AND nom like '$nom' 
    	  AND prenom like '$prenom'
    	  AND email like '$email'
    	  ORDER BY '$numero' ASC";
    Donc la on fait une selection sur les champs remplis... jusque là, ok... Le probleme, c'est que je dois aussi faire selon la date si elle est valide ou, c'est à dire, par exemple pour la date de debut, il faut qu'elle soit anterieur à la date du jour... et pour la date de fin il faut qu'elle soit plus grande que celle du jour...

    Avant cela fonctionnait car je n'avais pas séparé le jour, le mois et l'année...

    Comment faire maintenant???

    c'est assez urgent en plus...

    merci de votre aide

    laeti

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Bonjour,

    Si j'ai bien compris le problème, est-ce que l'ajout des 2 conditions suivantes ne suffirait pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select ...
    from...
    where...
    and concat(anneedebut, '-', moisdebut, '-', jourdebut) < curdate()
    and concat(anneefin, '-', moisfin, '-', jourfin) > curdate()
    Je n'ai pas testé, mais ça peut être une piste...

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 60
    Points : 30
    Points
    30
    Par défaut
    Merci ced j'ai testé ce que tu viens d'écrire ca parait correct et logique mais ca marche pas il me retourne aucun enregistrement alors qu'il y en a...

  4. #4
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Gasp !!!
    Bon, si la comparaison entre chaînes de caractères ne marche pas, il faut peut-être tenter la comparaison entre dates :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT ...
    FROM...
    WHERE...
    AND date(concat(anneedebut, '-', moisdebut, '-', jourdebut)) < curdate()
    AND date(concat(anneefin, '-', moisfin, '-', jourfin)) > curdate()
    C'est peut-être un problème de typage...

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  5. #5
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Tiens, question au passage : le mois et le jour sont sur 2 digits tout le temps ? (genre 01, 02,..., 09) ou sur 1 digit ?

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 60
    Points : 30
    Points
    30
    Par défaut
    Alors avec ta derniere réponse ca me sors que 3 resultats (ce qui n'est pas bon...) qui corresponde en fait lorsque les trois colonnes 'jourfin','moisfin','annefin' sont remplies et superieur a la date du jour... or la date de fin n'est pas souvent remplie...

    Le truc c'est qu'il faut que la date d'aujourd'hui par exemple soit encadré par les deux dates pour etre valide... j'espere avoir été assez clair dans l'explication de mon probleme...

    et c'est sur 2 digits

  7. #7
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    En fait, si il n'y a pas de date de fin mais que la date de début va bien, on sélectionne. C'est bien çà ?
    Bon alors ça donne un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT ...
    FROM...
    WHERE...
    AND date(concat(anneedebut, '-', moisdebut, '-', jourdebut)) < curdate()
    AND (date(concat(anneefin, '-', moisfin, '-', jourfin)) > curdate() OR (jourfin is null and moisfin is null and anneefin is null))
    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 60
    Points : 30
    Points
    30
    Par défaut
    Oui c'est ca que je veux...

    Mais je viens de tester... et ca marche pas...

  9. #9
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Peut-être en donnant quelques exemples de lignes, ça permettrait de voir pourquoi y veut pas...

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  10. #10
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 488
    Points : 6 037
    Points
    6 037
    Par défaut
    Citation Envoyé par ced Voir le message
    Bonjour,

    Si j'ai bien compris le problème, est-ce que l'ajout des 2 conditions suivantes ne suffirait pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select ...
    from...
    where...
    and concat(anneedebut, '-', moisdebut, '-', jourdebut) < curdate()
    and concat(anneefin, '-', moisfin, '-', jourfin) > curdate()
    Je n'ai pas testé, mais ça peut être une piste...

    ced
    Juste pour info . Mais il y a la fonction CONCAT_WS() qui permet d'indiquer le caractére séparateur.

    • CONCAT_WS(separator, str1, str2,...)
      La fonction CONCAT_WS() signifie CONCAT With Separator, c'est-à-dire "concaténation avec séparateur. Le premier argument est le séparateur utilisé pour le reste des arguments. Le séparateur peut être une chaîne de caractères, tout comme le reste des arguments. Si le séparateur est NULL, le résultat sera NULL. Cette fonction ignorera tous les arguments de valeur NULL et vides, hormis le séparateur. Le séparateur sera ajouté entre tous les arguments à concaténer :
      mysql> SELECT CONCAT_WS(",","Premier nom","Deuxième nom","Dernier nom");
      -> 'Premier nom,Deuxième nom,Dernier nom'
      mysql> SELECT CONCAT_WS(",","Premier nom",NULL,"Dernier nom");
      -> 'Premier nom,Dernier nom'
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  11. #11
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Merci pour l'info, c'est bon à savoir...

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 60
    Points : 30
    Points
    30
    Par défaut
    C'est bon ca marche merci pour l'aide!!!

    laeti

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

Discussions similaires

  1. [AC-2010] Afficher dans un message(Msgbox) les valeurs d'une colonne d'une requete
    Par sebing dans le forum VBA Access
    Réponses: 40
    Dernier message: 11/12/2012, 22h52
  2. nom de colonne en fonction du resultat(dans une seule requete)
    Par chezdevelopping dans le forum Requêtes
    Réponses: 7
    Dernier message: 14/06/2011, 12h30
  3. Réponses: 12
    Dernier message: 01/10/2009, 15h30
  4. Réponses: 5
    Dernier message: 18/12/2008, 10h12
  5. colonne de calcul dans une requête
    Par Virgile59 dans le forum Access
    Réponses: 2
    Dernier message: 27/10/2006, 14h55

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