{MySQL} Attribuer plusieurs mots-clés

Fermé
fred6 Messages postés 4 Date d'inscription dimanche 3 juin 2007 Statut Membre Dernière intervention 17 juillet 2009 - 17 juil. 2009 à 17:53
Yoan Messages postés 11795 Date d'inscription mardi 1 février 2005 Statut Modérateur Dernière intervention 10 décembre 2023 - 18 juil. 2009 à 12:34
Bonjour,
Je débute avec MySql sous Apache. Je veux créer une base pour gérer mes documents. J'ai donc créé une table qui identifie chaque document et une table qui répertorie les mots-clés qui décrivent ces documents. Je voudrais pouvoir attribuer plusieurs mots-clés à chaque document, et, d'autre part, rédiger la requête qui va me permettre de sélectionner les documents qui contiennent plusieurs mots-clés ? Comment faire ? Merci à l'avance de m'aider.

1 réponse

Yoan Messages postés 11795 Date d'inscription mardi 1 février 2005 Statut Modérateur Dernière intervention 10 décembre 2023 2 330
18 juil. 2009 à 12:34
Le schéma relationnel pourrait ressembler à ça :

Document(NomDoc, Chemin)
Mot_Cle(Document(NomDoc), Mot_Cle)

La clé primaire de la table Document est le champs NomDoc, la clé primaire de la table Mot_Cle sont les deux champs. Et le champs NomDoc de la table Mot_Cle est une clé étrangère vers le champs du même nom de Document.

Le fait de prendre les deux champs pour la clé primaire de Mot_Cle fait que tu peux attribuer plusieurs mot-clés à un même document :
La_conscience.doc, philosophie
La_conscience.doc, conscience
La_conscience.doc, préconscient
La_conscience.doc, inconscient
La_théorie_du_chaos, chaos
Etude_de_la_nature.pdf, nature
Etude_de_la_nature.pdf, faune
Etude_de_la_nature.pdf, flore
....


Si tu as par exemple 2 mots clé et que tu veux sélectionner les documents qui correspondent à ces 3 mots-clé en même temps, utilise par exemple des requêtes imbriquées, et tu en fais une de plus à chaque mot-clé supplémentaire :

SELECT NomDoc, Chemin
FROM Document
WHERE NomDoc IN (
     SELECT NomDoc
     FROM Mot_Cle
     WHERE Mot_Cle='Mon_mot_clé'
     AND NowDoc IN (
           SELECT NomDoc
           FROM Mot_Cle
           WHERE Mot_Cle='Mon_second_mot_clé'
           )
     )
0