IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Requête SQL sur une base HF


Sujet :

WinDev

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 39
    Points : 20
    Points
    20
    Par défaut Requête SQL sur une base HF
    Bonjour

    J'ai indexé différents documents et je voudrais faire une recherche sur un ou plusieurs mots. J'utilise la méthode de windev pour l'indexation, à savoir trois fichiers HF : MOT, INDEX et DOCUMENT

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

    J'ai créé la requête suivante : "SELECT Index.IDDOCUMENT, Mot.mot FROM
    Index, Mot WHERE Mot.IDMOT = Index.IDMOT AND
    (Mot.mot = 'GOUVERNEMENT' AND Mot.mot NOT LIKE 'PROJET%')"

    Cette requête me renvoit les 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

  2. #2
    Membre expert
    Avatar de Emmanuel Lecoester
    Profil pro
    Inscrit en
    Février 2003
    Messages
    1 493
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2003
    Messages : 1 493
    Points : 3 266
    Points
    3 266
    Par défaut
    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.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ...
    and Index.IDMOT not in (select Mot2.IDMOT  from mot mot2 where Mot2.mot LIKE '%PROJET%')

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    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%')

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 39
    Points : 20
    Points
    20
    Par défaut
    Alors j'ai essayé les trois requetes, mais en retour j'ai toujours mes trois enregistrements N'est-il vraiment pas possible de n'avoir que l'enregistrement 3 ? il contient le mot "GOUVERNEMENT" comme demandé mais pas le mot "PROJET"

    Pour le UPPER non, car dans la base, les mots clés sont en majuscule et je force la saisie en majuscule

  4. #4
    Membre expert
    Avatar de Emmanuel Lecoester
    Profil pro
    Inscrit en
    Février 2003
    Messages
    1 493
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2003
    Messages : 1 493
    Points : 3 266
    Points
    3 266
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    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 index index2, mot mot2 where Document.IDDOCUMENT  = Index2.IDDOCUMENT and Index2.IDMOT = Mot2.IDMOT AND Mot2.mot LIKE '%PROJET%')
    Voilà qui ira mieux je pense

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 39
    Points : 20
    Points
    20
    Par défaut
    Maintenant la requete ne me renvoit aucun résultat

    merci quand même, mais je crois que je vais tout faire en HF

  6. #6
    Membre expert
    Avatar de Emmanuel Lecoester
    Profil pro
    Inscrit en
    Février 2003
    Messages
    1 493
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2003
    Messages : 1 493
    Points : 3 266
    Points
    3 266
    Par défaut
    je suis étonné...

    Tu as bien 3 fichiers HF

    Document : IDDOCUMENT
    Index : IDDOCUMENT, IDMOT
    Mot : IDMOT, mot

    si oui la seule chose que j'ai fait c'est de vérifier que pour le document aucun mot clé contenant PROJET n'existe.

    As-tu fais le test sur le document ne contenant pas PROJET pour savoir si la partie not exists renvoie qqchose ?

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 39
    Points : 20
    Points
    20
    Par défaut
    Oui j'ai bien cette structure là et je tape la requête dans wdmap, mais il ne me trouve rien

Discussions similaires

  1. [2008] Requête SQL sur une base de données en python
    Par noramokh dans le forum Développement
    Réponses: 2
    Dernier message: 16/02/2015, 18h02
  2. Réponses: 11
    Dernier message: 22/01/2014, 20h30
  3. Requête SQL sur une base Access, where sur un champ date
    Par digital prophecy dans le forum Bases de données
    Réponses: 1
    Dernier message: 09/05/2008, 17h47
  4. Sql sur une base MySql
    Par Rickless dans le forum Bases de données
    Réponses: 17
    Dernier message: 06/04/2005, 14h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo