J'essaye de faire une reque=EAte SQL sur une liste de mots. Je
m'explique : j'ai ind=E9x=E9 diff=E9rents 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=E9 le
code suivant mais il ne me renvoit aucun r=E9sultat :
SI SAI_Recherche <> "" ALORS sCondition =3D "Mot.mot =3D '" +
SAI_Recherche + "'"
SI SAI_Recherche1 <> "" ALORS
SI sCondition =3D "" ALORS
sCondition =3D "Mot.mot =3D '" + SAI_Recherche1 + "'"
SINON
sCondition +=3D sLiaison1 + "Mot.mot =3D '" + SAI_Recherche1 + "'"
FIN
FIN
SI SAI_Recherche2 <> "" ALORS
SI sCondition =3D "" ALORS
sCondition =3D "Mot.mot LIKE '" + SAI_Recherche2 + "'"
SINON
sCondition +=3D sLiaison2 + "Mot.mot LIKE '" + SAI_Recherche2 + "'"
FIN
FIN
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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 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
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
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
On 27 déc, 16:59, PimSaVie wrote:
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
On 27 déc, 16:59, PimSaVie <pimsa...@hotmail.com> wrote:
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
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
On 27 déc, 18:20, wrote:
On 27 déc, 16:59, PimSaVie wrote:> Après plusie urs 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- 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)
On 27 déc, 18:20, b.engelma...@gmail.com wrote:
On 27 déc, 16:59, PimSaVie <pimsa...@hotmail.com> wrote:> Après plusie urs 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- 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 :(:(
On 27 déc, 16:59, PimSaVie wrote:> Après plusie urs 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- 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
"PimSaVie" a écrit dans le message de news:
On 27 déc, 18:20, wrote:
On 27 déc, 16:59, PimSaVie wrote:> 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%')"
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)
"PimSaVie" <pimsavie@hotmail.com> a écrit dans le message de news:
ab9cf873-8f5b-4540-8600-1e32ab066cbe@i3g2000hsf.googlegroups.com...
On 27 déc, 18:20, b.engelma...@gmail.com wrote:
On 27 déc, 16:59, PimSaVie <pimsa...@hotmail.com> wrote:> 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%')"
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 :(:(
On 27 déc, 16:59, PimSaVie wrote:> 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%')"
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 :(:(