Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

moins évident qu'il n'y parait...

4 réponses
Avatar
blancmunier
Bonjour =E0 tous
Voil=E0 mon probl=E8me... Je travaille sur une gestion de biblioth=E8que
Le mod=E8le tel que je l'ai d=E9fini est le suivant :
J'ai une table DOC, une table MOTCLE et une table servant d'association
entre les deux LISTE_MOTCLES
Un doc pouvant avoir plusieurs mot-cl=E9s et un mots-cl=E9 pouvant =EAtre
attribu=E9 a +ieurs docs.
Voici la probl=E9matique :
Je dois proposer une zone de recherche dans lequel l'utilisateur peut
=E9crire plusieurs mots et je dois retrouver les documents contenant
tous les mots saisis dans les mots-cl=E9s.

exemple : l'utilisateur tape URBANISME COMMERC dans la zone de
recherche
Le logiciel doit ressortir a la fois le document qui a les 2 mots-cl=E9
suivants :
URBANISME - COMMERCE NON SEDENTAIRE
et le document qui a les 3 mots-cl=E9 suivants :
URBANISME OPERATIONNEL - COMMERCE - STATISTIQUES

ma strat=E9gie : Je s=E9lectionne tout les documents dans une table
temporaire
j'enl=E8ve tout les documents qui n'ont pas comme mot-cl=E9 %URBANISME%
puis tous ceux qui n'ont pas comme mot-cl=E9 %COMMERC% et il me reste
juste ce que je veux !

ma difficult=E9 : l'instruction SQL "MINUS" n'est pas tol=E9r=E9e avec
Access, et l=E0 je bloque...

Je ne peux pas parcourir chaque enregistement pour voir s'il v=E9rifie
bien les crit=E8res... car le temps de traitement serait trop long je
pense....

En esp=E9rant soumettre un probl=E8me int=E9ressant =E0 la communaut=E9,
Yvan

PS: je suis sous access 2000

4 réponses

Avatar
Sylvain Lafontaine
Plutôt que de tout mettre dans une table temporaire puis de retirer ceux qui
ne conviennent pas, vous devriez copier dans une première table temporaire
uniquement ceux qui ont le premier mot clef et puis après recopier dans une
deuxième table temporaire les éléments de la première table temporaire ayant
le deuxième mot clef. Ceci pour les cas complexes de AND et de OU.

Dans ce cas particulier, vous pouvez également écrire quelque chose du
genre:

Select ...
Where (@p1 is null or Description like @p1)
And (@p2 is null or Description like @p2)
And ...

Évidemment, vous allez trouver sur le web plusieurs exemples de raccourcis
au sujet des arguments @p1, @p2, ....; cependant l'éxemple ci-haut est pour
vous montrer le fonctionnement de la chose. Dans ce genre de problème,
l'utilisation des clauses IN, Not IN, Exists() et Not Exists() sont
également très utiles.

--
Sylvain Lafontaine, ing.
MVP - Technologies Virtual-PC
E-mail: http://cerbermail.com/?QugbLEWINF


wrote in message
news:
Bonjour à tous
Voilà mon problème... Je travaille sur une gestion de bibliothèque
Le modèle tel que je l'ai défini est le suivant :
J'ai une table DOC, une table MOTCLE et une table servant d'association
entre les deux LISTE_MOTCLES
Un doc pouvant avoir plusieurs mot-clés et un mots-clé pouvant être
attribué a +ieurs docs.
Voici la problématique :
Je dois proposer une zone de recherche dans lequel l'utilisateur peut
écrire plusieurs mots et je dois retrouver les documents contenant
tous les mots saisis dans les mots-clés.

exemple : l'utilisateur tape URBANISME COMMERC dans la zone de
recherche
Le logiciel doit ressortir a la fois le document qui a les 2 mots-clé
suivants :
URBANISME - COMMERCE NON SEDENTAIRE
et le document qui a les 3 mots-clé suivants :
URBANISME OPERATIONNEL - COMMERCE - STATISTIQUES

ma stratégie : Je sélectionne tout les documents dans une table
temporaire
j'enlève tout les documents qui n'ont pas comme mot-clé %URBANISME%
puis tous ceux qui n'ont pas comme mot-clé %COMMERC% et il me reste
juste ce que je veux !

ma difficulté : l'instruction SQL "MINUS" n'est pas tolérée avec
Access, et là je bloque...

Je ne peux pas parcourir chaque enregistement pour voir s'il vérifie
bien les critères... car le temps de traitement serait trop long je
pense....

En espérant soumettre un problème intéressant à la communauté,
Yvan

PS: je suis sous access 2000
Avatar
circaete
J'ai déjà eu un problème similaire que j'ai résolu de la façon suivante:
Dans la table listant les éléments à sélectionner, ici, les mots clés,
j'ajoute un champ oui/non que j'appelle "Sélection"
J'ai une requête mise à jour qui remet tous les champs sélection à zéro en
début de procédure.
Dans mon formulaire de recherche j'affiche la liste des éléments à
sélectionner avec la case à cocher du champ "Sélection"
Ma requête qui donné le résultat de la recherche a pour critère Sélection=-1



Bonjour à tous
Voilà mon problème... Je travaille sur une gestion de bibliothèque
Le modèle tel que je l'ai défini est le suivant :
J'ai une table DOC, une table MOTCLE et une table servant d'association
entre les deux LISTE_MOTCLES
Un doc pouvant avoir plusieurs mot-clés et un mots-clé pouvant être
attribué a +ieurs docs.
Voici la problématique :
Je dois proposer une zone de recherche dans lequel l'utilisateur peut
écrire plusieurs mots et je dois retrouver les documents contenant
tous les mots saisis dans les mots-clés.

exemple : l'utilisateur tape URBANISME COMMERC dans la zone de
recherche
Le logiciel doit ressortir a la fois le document qui a les 2 mots-clé
suivants :
URBANISME - COMMERCE NON SEDENTAIRE
et le document qui a les 3 mots-clé suivants :
URBANISME OPERATIONNEL - COMMERCE - STATISTIQUES

ma stratégie : Je sélectionne tout les documents dans une table
temporaire
j'enlève tout les documents qui n'ont pas comme mot-clé %URBANISME%
puis tous ceux qui n'ont pas comme mot-clé %COMMERC% et il me reste
juste ce que je veux !

ma difficulté : l'instruction SQL "MINUS" n'est pas tolérée avec
Access, et là je bloque...

Je ne peux pas parcourir chaque enregistement pour voir s'il vérifie
bien les critères... car le temps de traitement serait trop long je
pense....

En espérant soumettre un problème intéressant à la communauté,
Yvan

PS: je suis sous access 2000




Avatar
blancmunier
Salut sylvain
En fait j'ai simplifié mon problème au maximum pour qu'il reste clair
(et en même tps, pour clarifier mes idées) et cette nuit j'ai bloqué
sur le fait que le NOT IN pouvait répondre à ma problématique mais
ton idée est encore 100.000 fois mieux ! une table par mot dans la
recherche, un INTERSECT (qui correspond au IN dans le SQL Access, c'est
bien ca ?) et le tour devrait être joué ...
Je me lance au boulot !
Avatar
blancmunier
Salut sylvain
En fait j'ai simplifié mon problème au maximum pour qu'il reste clair
(et en même tps, pour clarifier mes idées) et cette nuit j'ai bloqué
sur le fait que le NOT IN pouvait répondre à ma problématique mais
ton idée est encore 100.000 fois mieux ! une table par mot dans la
recherche, un INTERSECT (qui correspond au IN dans le SQL Access, c'est
bien ca ?) et le tour devrait être joué ...
Je me lance au boulot !