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 :

Petit soucis avec une requête


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 18
    Points : 13
    Points
    13
    Par défaut Petit soucis avec une requête
    Bonjour à tous,

    J'ai un petit soucis avec une requête je vois d'ou viens le problème mais je ne sais pas le résoudre:

    Il s'agit de vérifier si un collaborateur possède tel ou tel compétences.
    J'ai donc une table collaborateur, une table compétences et une table de liaison (collab_comp).

    Mais dans le champs de recherhe l'utilisateur peut spécifier plusieurs compétences et ensuite spécifié si il veut (compétences A ou compétence B) ou (compétence A et compétence B)
    Le problème se pose avec le ET, voila par exemple une requête généré avec le OU:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT distinct collab.ID_COL, collab.NOM FROM competences, collab_comp, collab WHERE (collab.ID_COL= collab_comp.ID_COL AND collab_comp.ID_COMP=competences.ID_COMP AND (competences.produits LIKE '%Lotus%' OR competences.produits LIKE '%Windows%') )
    qui me renvoie un certain nombre de résultats, maintenant avec le AND:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT distinct collab.ID_COL, collab.NOM FROM competences, collab_comp, collab WHERE (collab.ID_COL= collab_comp.ID_COL AND collab_comp.ID_COMP=competences.ID_COMP AND (competences.produits LIKE '%Lotus%' AND competences.produits LIKE '%Windows%') )
    Et cette requête ne me renvoie aucun résultat, alors qu'il y a des collaborateurs ayant les 2 compétences..

    Merci d'avance si vous voyez qql chose de louche

  2. #2
    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,

    n'est ce pas le meme soucis que ce post :
    http://www.developpez.net/forums/sho...d.php?t=257614

    si oui, tu peux t'en inspirer.

    bon courage

    Michel

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    Oui en effet, c'est le même problème je pourrais donc faire (avec des joker):


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT collab.ID_COL, collab.NOM FROM competences, collab_comp, collab WHERE (collab.ID_COL= collab_comp.ID_COL AND collab_comp.ID_COMP=competences.ID_COMP AND (competences.produits IN ('%Lotus%','%Windows%')  ) )
    En revanche cela marche pour un OU, mais si je souhaite qu'il connaisse Lotus ET Windows?

    J'ai vu qu'on pouvait utiliser HAVING count(*)=2, mais je ne vois pas trop où le mettre dans ma requête, merci.

    edit: Je viens de tester à priori les Joker ne fonctionne pas, et j'en ai absolument besoin, mais bon le soucis reste tout de même sur l'opérateur ET

  4. #4
    Membre éprouvé
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Points : 1 249
    Points
    1 249
    Par défaut
    'IN' suppose une vraie égalité. Pour utiliser '_' et '%' il faut passer par like.

    'HAVING' suppose d'avoir un 'GROUP BY' (par collaborateur ici, en supprimant le 'DISTINCT'). Le truc est, pour chercher 'Lotus ET Windows', de chercher 'Lotus OU Windows' et de compter les résultats par collaborateur. Il doit y en avoir 2 pour ceux qui connaissent les 2.

    Cette méthode suppose que chaque critère soit susceptible de ramener une ligne au plus. Avec 'LIKE' il y a un risque que '%Windows%' ramasse 'Windows 2000' et 'Windows XP' et sorte un pro de Windows qui ne connait rien à Lotus. Si ce genre de cas risque de se présenter il faudra faire plusieurs jointures sur les compétences (une par critère) ou, plus lisible sur un mysql récent, regarder du côté de la clause 'EXISTS'.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    Oui tu as bien vu c'est exactement le genre de cas qui se présente.

    Je vais regarder du côté de EXISTS ce que ça donne, merci.

    edit: en fait vu que la requête est généré en PHP ce n'est pas pratique avec EXIST, mais j'ai essayé de faire qql chose qui ressemble à ça:

    SELECT DISTINCT collab.ID_COL, collab.NOM
    FROM competences, collab_comp, collab
    WHERE (
    collab.ID_COL = collab_comp.ID_COL
    AND collab_comp.ID_COMP = competences.ID_COMP
    AND competences.produits LIKE '%windows%'
    )
    AND (
    collab.ID_COL = collab_comp.ID_COL
    AND collab_comp.ID_COMP = competences.ID_COMP
    AND competences.produits LIKE '%novell%'
    )
    LIMIT 0 , 30
    Mais ça ne me donne aucun résultat...

Discussions similaires

  1. soucis avec une requète d'insertion
    Par veriecherie dans le forum ASP
    Réponses: 8
    Dernier message: 05/08/2008, 11h11
  2. Petit problème avec une requête SQL en VB6
    Par muzele dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 15/11/2007, 20h51
  3. [SQL] Soucis avec une requête
    Par Auden dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 31/05/2007, 15h07
  4. [VBA-E]Petit souci avec une boucle
    Par Mou dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 17/04/2007, 15h15
  5. [MySQL] Un petit soucis avec la requête, probablement à cause de la jointure
    Par gazouza dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 17/03/2006, 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