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 :

probleme de requete (de sous requetes ?)


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 12
    Points : 12
    Points
    12
    Par défaut probleme de requete (de sous requetes ?)
    bonjour,
    je post ici car on m'a précédement dit que la synthaxe sql de mysql était assez particulière. J'utilise la version fournie avec easyphp 1.8, soit la 4.1.9.
    Mon problème est d'effectuer une recherche d'un agent à partir de mots clef. J'ai une table agent, une table mots clef et une table agentmotclef contenant les clés primaires des deux précédentes pour gérer les correspondances ente mots clef et agents.

    comment faire pour rechercher un agent qui correspond à 2 mots clef ?
    mot clef: a,b,c
    agent: A,B,C
    agentmotclef: A travail sur a; A travail sur b; B travail sur a

    recherche: quels sont les agents travaillants sur a et b ?? réponse: A

    c'est sans doute un problème de logique mais a priori je ne vois pas, quelqu'un peut il m'aider ?

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    il manque la structure de tes tables, alors je te donne une requete se basant sur ces 3 tables (qui m'ont paru les plus logiques)

    agent
    -------
    id
    titre

    motclef
    ---------
    id
    titre

    agentmotclef
    ---------------
    agentid
    motclefid


    si tu veux la requete, tu dois avoir quelque chose comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT agent.titre FROM `agent`, `agentmotclef` WHERE agentmotclef.agentid = agent.id AND agentmotclef.motclefid = motclef.id AND motclef.titre = 'a' AND motclef.titre = 'b'

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 12
    Points : 12
    Points
    12
    Par défaut
    merci pour la répone, la structure des tables était presque ça, tes id sont des codes chez moi juste...
    pour le reste je crois que ta requête ne fonctionne pas, on ne peut pas enchainer deux conditions du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND motclef.titre = 'a' AND motclef.titre = 'b'
    car aucun tuple ne peut correspondre à a ET b (enfin je crois)

    j'ai trouvé quelque chose qui fonctionne mais ça m'a l'air bien compliqué pour une demande a priori simple. Ca fait:
    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
    CREATE TEMPORARY TABLE `T1` (
      `codeagent` INT NOT NULL,
      `codemotclef` INT NOT NULL
    );
     
    INSERT INTO T1 SELECT codeagent,codemotclef FROM agentmotclef WHERE codemotclef = 2;
     
    CREATE TEMPORARY TABLE `T2` (
      `codeagent` INT NOT NULL,
      `codemotclef` INT NOT NULL
    );
    INSERT INTO T2 SELECT codeagent,codemotclef FROM agentmotclef WHERE codemotclef = 3;
     
    SELECT DISTINCT agentmotclef.codeagent FROM agentmotclef,T1,T2
    WHERE agentmotclef.codeagent = T1.codeagent
    AND agentmotclef.codeagent = T2.codeagent;
    voilà si il y a plus simple je suis prenneur merci

  4. #4
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Il y a plus simple (et plus logique) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT * FROM agent WHERE codeagent IN
    (SELECT codeagent FROM agentmotclef WHERE codemotclef=2)
    AND codeagent IN
    (SELECT codeagent FROM agentmotclef WHERE codemotclef=3)
    Ou (avec des jointures) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT agent.* FROM agent, agentmotclef a1, agentmotclef a2
    WHERE agent.codeagent = a1.codeagent
    AND a1.codeagent = a2.codeagent
    AND a1.codemotclef=2
    AND a2.codemotclef=3
    Pensez au bouton

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    juste un poil plus rapide que moi...
    mais je proposais la meme solution

  6. #6
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 12
    Points : 12
    Points
    12
    Par défaut
    Effectivement y a pas photo...je me disais bien
    Merci beaucoup pour le code

  7. #7
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 12
    Points : 12
    Points
    12
    Par défaut
    heu juste par curiosité,
    concernant la solution avec les jointures, quel est ce mécanisme de différenciation des tables agentmotclef a1 et a2 ???

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 25/05/2009, 15h44
  2. Sous requete de sous requete..(trop long)
    Par Thesum dans le forum Langage SQL
    Réponses: 3
    Dernier message: 09/10/2008, 10h12
  3. MySQL: Probleme d'UPDATE avec sous requete SELECT
    Par simonius dans le forum Requêtes
    Réponses: 1
    Dernier message: 05/11/2007, 14h57
  4. [sql]Probleme de count dans une requete sql (sous access)
    Par castelligreg dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 14/04/2006, 16h06
  5. probleme avec requete et sous-requete...
    Par birkoss dans le forum Langage SQL
    Réponses: 5
    Dernier message: 17/08/2005, 21h26

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