Requête SQL

Le
PimSaVie
Bonjour

J'essaye de faire une requeête SQL sur une liste de mots. Je
m'explique : j'ai indéxé différents documents, et j'aimerais faire une=

recherche sur un ou plusieurs mots.. Ma recherche serait du style
"mot1 (ET/OU/SAUF) mot2(ET/OU/SAUF) mot3"

Mais en SQL je ne vois pas comment combiner tous cela. J'ai essayé le
code suivant mais il ne me renvoit aucun résultat :

SI SAI_Recherche <> "" ALORS sCondition = "Mot.mot = '" +
SAI_Recherche + "'"
SI SAI_Recherche1 <> "" ALORS
SI sCondition = "" ALORS
sCondition = "Mot.mot = '" + SAI_Recherche1 + "'"
SINON
sCondition += sLiaison1 + "Mot.mot = '" + SAI_Recherche1 + "'"
FIN
FIN
SI SAI_Recherche2 <> "" ALORS
SI sCondition = "" ALORS
sCondition = "Mot.mot LIKE '" + SAI_Recherche2 + "'"
SINON
sCondition += sLiaison2 + "Mot.mot LIKE '" + SAI_Recherche2 + "'"
FIN
FIN

// Construire la requête
sRequêteSQL = "SELECT Index.IDDOCUMENT, Index.IDMOT, Mot.IDMOT,
Mot.mot, Document.IDDOCUMENT, Document.IDArticle " + "FROM Index,
Document, Mot " + "WHERE Index.IDDOCUMENT = Document.IDDOCUMENT AND
Mot.IDMOT = Index.IDMOT "+ "AND (" + sCondition + ")"

Est-ce que quelqu'un aurait une idée?

Merci d'avance

Karine
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
PimSaVie
Le #14559921
Après plusieurs essais, j'ai réussi à modifier mon code. Mais je
n'obtiens toujours pas le résultat voulu. Alors en fait,

j'ai 3 enregistrements qui ont pour mot clés :
1 : gouvernement-projet
2 : gouvernement-projet
3 : gouvernement

J'obtiens la requête suivante "SELECT Index.IDDOCUMENT, Index.IDMOT,
Mot.IDMOT, Mot.mot, Document.IDDOCUMENT, Document.IDArticle FROM
Index, Document, Mot WHERE Index.IDDOCUMENT = Document.IDDOCUMENT AND
Mot.IDMOT = Index.IDMOT AND
(Mot.mot = 'GOUVERNEMENT' AND Mot.mot NOT LIKE 'PROJET%')"

Elle me renverra mes trois enregistrements, alors que je voudrais
qu'elle ne me renvoit que l'enregistrement 3

Est-ce que vous avez une idée de mon erreur?

Merci
b.engelmajer
Le #14559901
On 27 déc, 16:59, PimSaVie
Après plusieurs essais, j'ai réussi à modifier mon code. Mais je
n'obtiens toujours pas le résultat voulu. Alors en fait,

j'ai 3 enregistrements qui ont pour mot clés :
1 : gouvernement-projet
2 : gouvernement-projet


il faut :
NOT LIKE '%PROJET%'
l'ordre
NOT LIKE 'PROJET%'
demande de refuser les mots qui commencent par 'PROJET'...
gouvernement est donc correct!

3 : gouvernement

J'obtiens la requête suivante "SELECT Index.IDDOCUMENT, Index.IDMOT,
Mot.IDMOT, Mot.mot, Document.IDDOCUMENT, Document.IDArticle FROM
Index, Document, Mot WHERE Index.IDDOCUMENT = Document.IDDOCUMENT AND
Mot.IDMOT = Index.IDMOT AND
(Mot.mot = 'GOUVERNEMENT' AND Mot.mot NOT LIKE 'PROJET%')"

Elle me renverra mes trois enregistrements, alors que je voudrais
qu'elle ne me renvoit que l'enregistrement 3

Est-ce que vous avez une idée de mon erreur?

Merci


PimSaVie
Le #14559871
On 27 déc, 18:20, wrote:
On 27 déc, 16:59, PimSaVie > n'obtiens toujours pas le résultat voulu. Alors en fait,

> j'ai 3 enregistrements qui ont pour mot clés :
> 1 : gouvernement-projet
> 2 : gouvernement-projet

il faut :
    NOT LIKE '%PROJET%'
l'ordre
  NOT LIKE 'PROJET%'
demande de refuser les mots qui commencent par 'PROJET'...
gouvernement est donc correct!



> 3 : gouvernement

> J'obtiens la requête suivante "SELECT Index.IDDOCUMENT, Index.IDMOT,
> Mot.IDMOT, Mot.mot, Document.IDDOCUMENT, Document.IDArticle FROM
> Index, Document, Mot WHERE Index.IDDOCUMENT = Document.IDDOCUMENT AND
> Mot.IDMOT = Index.IDMOT AND
> (Mot.mot = 'GOUVERNEMENT' AND Mot.mot NOT LIKE 'PROJET%')"

> Elle me renverra mes trois enregistrements, alors que je voudrais
> qu'elle ne me renvoit que l'enregistrement 3

> Est-ce que vous avez une idée de mon erreur?

> Merci- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -



Même en mettant "NOT LIKE '%PROJET%' ", j'ai quand même mes trois
enregistrements qui ressortent :(:(

Mais merci quand même ;o)
Emmanuel LECOESTER
Le #14559861
"PimSaVie"
On 27 déc, 18:20, wrote:
On 27 déc, 16:59, PimSaVie essais, j'ai réussi à modifier mon code. Mais je
> n'obtiens toujours pas le résultat voulu. Alors en fait,

> j'ai 3 enregistrements qui ont pour mot clés :
> 1 : gouvernement-projet
> 2 : gouvernement-projet

il faut :
NOT LIKE '%PROJET%'
l'ordre
NOT LIKE 'PROJET%'
demande de refuser les mots qui commencent par 'PROJET'...
gouvernement est donc correct!



> 3 : gouvernement

> J'obtiens la requête suivante "SELECT Index.IDDOCUMENT, Index.IDMOT,
> Mot.IDMOT, Mot.mot, Document.IDDOCUMENT, Document.IDArticle FROM
> Index, Document, Mot WHERE Index.IDDOCUMENT = Document.IDDOCUMENT AND
> Mot.IDMOT = Index.IDMOT AND
> (Mot.mot = 'GOUVERNEMENT' AND Mot.mot NOT LIKE 'PROJET%')"



Il ne manquerait pas un UPPER ? projet != PROJET. Mais en relisant une
n-ième fois la requete et le resultat, je pense que c'est bon pour ce point.
De plus (Mot.mot = 'GOUVERNEMENT' AND Mot.mot NOT LIKE '%PROJET%') est
fausse car c'est égal à (Mot.mot = 'GOUVERNEMENT') donc pour moi ca doit
renvoyer... 3 lignes. Le mot clé GOUVERNEMENT est bien présent dans tes 3
cas.

SELECT *
FROM Index, Document, Mot
WHERE Document.IDDOCUMENT = Index.IDDOCUMENT
AND Index.IDMOT = Mot.IDMOT
and Mot.mot = 'GOUVERNEMENT'
and not exists (select 1 from mot mot2 where Index.IDMOT = Mot2.IDMOT AND
Mot2.mot LIKE '%PROJET%')

ou

...
and Index.IDMOT not in (select Mot2.IDMOT from mot mot2 where Mot2.mot LIKE
'%PROJET%')


/* mode HS
d'où le pourquoi je préfère maintenant l'écriture : on voit bien mes
jointures PUIS mes règles de filtre. On constate plus facilement que le
filtre est "mauvais".

SELECT *
FROM Document
inner join Index on Document.IDDOCUMENT = Index.IDDOCUMENT
inner join Mot on Index.IDMOT = Mot.IDMOT
WHERE (Mot.mot = 'GOUVERNEMENT' AND Mot.mot NOT LIKE 'PROJET%')
*/




> Elle me renverra mes trois enregistrements, alors que je voudrais
> qu'elle ne me renvoit que l'enregistrement 3

> Est-ce que vous avez une idée de mon erreur?

> Merci- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -



Même en mettant "NOT LIKE '%PROJET%' ", j'ai quand même mes trois
enregistrements qui ressortent :(:(

Mais merci quand même ;o)
Publicité
Poster une réponse
Anonyme