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

Requête SQL

4 réponses
Avatar
PimSaVie
Bonjour

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

// Construire la requ=EAte
sRequ=EAteSQL =3D "SELECT Index.IDDOCUMENT, Index.IDMOT, Mot.IDMOT,
Mot.mot, Document.IDDOCUMENT, Document.IDArticle " + "FROM Index,
Document, Mot " + "WHERE Index.IDDOCUMENT =3D Document.IDDOCUMENT AND
Mot.IDMOT =3D Index.IDMOT "+ "AND (" + sCondition + ")"

Est-ce que quelqu'un aurait une id=E9e?

Merci d'avance

Karine

4 réponses

Avatar
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
Avatar
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


Avatar
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)
Avatar
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)