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

Langage SQL Discussion :

[SQL] indexation textuelle


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 23
    Points : 19
    Points
    19
    Par défaut [SQL] indexation textuelle
    bonjour,

    J'ai suivi le tutoriel sur l'indexation textuelle ( http://sql.developpez.com/indextextuelle ) , et je voudrai avoir un conseil pour récupérer le nombre de résultats d'une recherche.

    Je prends le cas de la recherche avec un 'ET' sur plusieurs mots :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select distinct t.TXT_ID
    from   TEXTE t join INDEX d on t.TXT_ID = d.TXT_ID
                   join MOT m   on d.MOT_ID = m.MOT_ID
    where  m.MOT_MOT in ('BASSE', 'GUITARE', 'CONTREBASSE')
    group  by t.TXT_ID
    having count(*) >= 3
    Ce que je souhaite faire c'est reprendre la requete avec un count() pour me donner le nombre de résultats:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select count(distinct t.TXT_ID)
    from   TEXTE t join INDEX d on t.TXT_ID = d.TXT_ID
                   join MOT m   on d.MOT_ID = m.MOT_ID
    where  m.MOT_MOT in ('BASSE', 'GUITARE', 'CONTREBASSE')
    group  by t.TXT_ID
    having count(*) >= 3
    Bien sûr, cette solution ne marche pas, et me donne d'avantage de résultats que prévu, car la clause having n'est pas prise en compte.

    Est-ce que vous avez une idée?

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Si j'ai bien compris, tu veux avoir les trois mots ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HAVING count(DISTINCT m.MOT_MOT) = 3
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 772
    Points : 52 737
    Points
    52 737
    Billets dans le blog
    5
    Par défaut
    pas bien compris ce que tu veut, mais étant l'auteur de la chose, je ferais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT *
    FROM
    (
    SELECT DISTINCT t.TXT_ID, COUNT(*) AS NOMBRE
    FROM   TEXTE t JOIN INDEX d ON t.TXT_ID = d.TXT_ID
                   JOIN MOT m   ON d.MOT_ID = m.MOT_ID
    WHERE  m.MOT_MOT IN ('BASSE', 'GUITARE', 'CONTREBASSE')
    GROUP  BY t.TXT_ID
    ) T
    WHERE NOMBRE >= 3
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 23
    Points : 19
    Points
    19
    Par défaut
    Merci de vos réponses.
    La solution de SQLPro réponds exactement a ma question (avec un select count(*) au lieu du select * )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT COUNT(*) 
    FROM 
         ( 
           SELECT DISTINCT t.TXT_ID, COUNT(*) AS NOMBRE 
           FROM TEXTE t JOIN INDEX d ON t.TXT_ID = d.TXT_ID 
                                  JOIN MOT m ON d.MOT_ID = m.MOT_ID 
           WHERE m.MOT_MOT IN ('BASSE', 'GUITARE', 'CONTREBASSE') 
         GROUP BY t.TXT_ID ) T 
    WHERE NOMBRE >= 3
    Merci beaucoup!

    Noel

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. ARTICLE : indexation textuelle et recherches plain texte
    Par SQLpro dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/10/2010, 13h31
  2. [SQL] Index des données insérées
    Par alband85 dans le forum Bibliothèques tierces
    Réponses: 7
    Dernier message: 22/04/2008, 14h01
  3. [SQL]Index Type
    Par stos dans le forum Oracle
    Réponses: 5
    Dernier message: 20/07/2006, 09h08
  4. [Sql] index sur vue
    Par fxp17 dans le forum Oracle
    Réponses: 8
    Dernier message: 23/02/2006, 10h56

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