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 SQL Discussion :

chercher plusieurs mots-clef simultanéments et récupérer ce qui va bien


Sujet :

Langage SQL

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    620
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2006
    Messages : 620
    Points : 453
    Points
    453
    Par défaut chercher plusieurs mots-clef simultanéments et récupérer ce qui va bien
    Bonjour,

    Je ne vois pas comment écrire une requète qui permette, par exemple, de chercher le résultat pour trouver des éléments associés à plusieurs mots-clef.
    Je m'explique :

    J'ai une table de mots clefs :

    id | mot
    1 beurre
    2 tartine
    3 confiture
    4 entrée
    5 viande

    Une table de concepts :

    id | concept
    1 déjeuner
    2 Petit-déjeuner
    3 dîner

    Et enfin une table de correspondance

    id | id_mot | id_concept
    1 3 1
    2 4 1
    3 4 3

    etc.

    Si je veux chercher les concepts associés à deux mots, disons que viande et entrée doivent renvoyer déjeuner et dîner (ils sont associés dans la table de correspondance) je vois mal comment bâtir une telle requête ? (Je suis sous MySQL + PHP, soit dit-en passant).
    Je peux récupérer les id_mots en passant successivement la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT id FROM mots-clef WHERE mot='le mot que je cherche'
    et une fois que j'ai ces id, comment construire une requête qui renvoie les id-concept associés à *chacun* de ces mots ? (incluant rigoureusement les deux mots, pas l'un et/ou l'autre) ? Ou bien cette architecture est-elle idiote pour ce genre d'applications ?

    Merci beaucoup !

    Hugo

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 902
    Points : 51 646
    Points
    51 646
    Billets dans le blog
    6
    Par défaut
    Vous donnez un jeu d'essais faux et vous ne respectez par la charte de postage en ne foiurnissant pas les ordre SQL de création de vos tables et vos INSERT. A l'avenir faites le si vous voulez être aidé !

    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
    34
    35
    36
    37
    38
    CREATE TABLE T_MOTCLEF_MCF
    (MCF_ID       INT NOT NULL PRIMARY KEY,
     MCF_MOT      VARCHAR(32) NOT NULL)
     
    INSERT INTO T_MOTCLEF_MCF VALUES (1, 'beurre')
    INSERT INTO T_MOTCLEF_MCF VALUES (2, 'tartine')
    INSERT INTO T_MOTCLEF_MCF VALUES (3, 'confiture')
    INSERT INTO T_MOTCLEF_MCF VALUES (4, 'entrée')
    INSERT INTO T_MOTCLEF_MCF VALUES (5, 'viande')
     
    CREATE TABLE T_CONCEPT_CCP
    (CCP_ID       INT NOT NULL PRIMARY KEY,
     CCP_LIBELLE  VARCHAR(32) NOT NULL) 
     
    INSERT INTO T_CONCEPT_CCP VALUES (1, 'déjeuner')
    INSERT INTO T_CONCEPT_CCP VALUES (2, 'Petit-déjeuner')
    INSERT INTO T_CONCEPT_CCP VALUES (3, 'dîner')
     
    CREATE TABLE T_MOT_CONCEPT_MCP
    (MCP_ID     INT NOT NULL PRIMARY KEY,
     MCF_ID     INT NOT NULL FOREIGN KEY REFERENCES T_MOTCLEF_MCF (MCF_ID),
     CCP_ID     INT NOT NULL FOREIGN KEY REFERENCES T_CONCEPT_CCP (CCP_ID))
     
    INSERT INTO T_MOT_CONCEPT_MCP VALUES (1, 3, 1)
    INSERT INTO T_MOT_CONCEPT_MCP VALUES (2, 4, 2)
    INSERT INTO T_MOT_CONCEPT_MCP VALUES (3, 4, 3)
    INSERT INTO T_MOT_CONCEPT_MCP VALUES (4, 5, 3)
    INSERT INTO T_MOT_CONCEPT_MCP VALUES (5, 5, 2)
     
    SELECT CCP_LIBELLE 
    FROM   T_MOT_CONCEPT_MCP AS MCP
           INNER JOIN T_MOTCLEF_MCF AS MCF
                 ON MCP.MCF_ID = MCF.MCF_ID
           INNER JOIN T_CONCEPT_CCP AS CCP
                 ON MCP.CCP_ID = CCP.CCP_ID
    WHERE  MCF_MOT IN ('viande', 'entrée')
    GROUP  BY CCP_LIBELLE
    HAVING COUNT(*) = 2
    Lisez l'article que j'ai écrit à ce sujet pour en savoir plus : http://sqlpro.developpez.com/cours/indextextuelle/

    L'utilisation systématique de ID partout dans les tables est idiot. Dans un système d'information, chaque attribut doit avoir un nom unique (Donc pas de nomde colonne genre DATE, ID, NOM... ). Bien entendu pour les clefs primaires et étrangères, le nom doit être le même puisque c'est LA MEME INFORMATION ! Or vous avez fait tout le contraire...

    A +

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    620
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2006
    Messages : 620
    Points : 453
    Points
    453
    Par défaut
    Bonjour,

    Merci - sincèrement - de m'avoir accordé de votre temps .
    Désolé pour les instructions de création : je ne connaissais pas cette règle. Je suis un amateur complet en matière de SQL, de toute évidence... Merci pour la référence : il faudra que je trouve le temps de me former, mais j'ai déjà des semaines de 60H et l'informatique n'est pas mon métier - enfin comme outil de calcul, si... Mais ça va pas être facile pour le SQL : on fait tous au mieux.
    Ceci-dit, ma question demeure...

    Merci encore

    Hugo

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    620
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2006
    Messages : 620
    Points : 453
    Points
    453
    Par défaut
    Je viens de lire votre lien : c'est génial !!! Merci beaucoup

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

Discussions similaires

  1. [MySQL] Chercher plusieurs mots dans une colonne
    Par persia dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/08/2011, 14h56
  2. [XL-2003] Chercher et remplacer des cellules en fonction de plusieurs mots
    Par FCL31 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 21/04/2010, 11h59
  3. [AC-2003] recherche de plusieurs mots clefs
    Par zborg dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 10/02/2010, 09h54
  4. Récupérer les mots-clefs d'une page
    Par DJuL- dans le forum Langage
    Réponses: 3
    Dernier message: 13/02/2009, 17h07
  5. Méthode find avec plusieurs mots à chercher
    Par domb_st dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/06/2007, 17h33

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