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

MS SQL Server Discussion :

Problème résultat CONTAINS


Sujet :

MS SQL Server

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 41
    Points : 41
    Points
    41
    Par défaut Problème résultat CONTAINS
    Bonjour à tous,
    j'ai un petit soucis pour faire une recherche avec CONTAINS. Concrètement je voudrais que ma query me ramène tous les records contenant dans un champ le mot "france".

    Comme dirait Mr SQLPro (dont je recommande fortement les formations !!!) : "Un exemple vaut mieux qu'un long discour"

    Exemple :

    Contenu de la table Table_1

    Id | Libelle1 | Libelle2 |
    _______________________________
    1 | fort de france | NULL |
    2 | NULL | france soir |
    3 | souffrance | NULL |

    Je voudrais que ma query me renvoit 3 records
    Mais elle me renvoit uniquement les 2 premiers

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT * 
    FROM Table_1 
    WHERE 
    CONTAINS(*,'"*france*"')
    Je n'ai peut être pas bien saisi comment s'utilise CONTAINS ??

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonsoir,

    Peux-tu essayer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * 
    FROM Table_1 
    WHERE FREETEXT(Libelle1,Libelle2, 'france')
    Et nous dire ce que cela donne ?

    A+

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 41
    Points : 41
    Points
    41
    Par défaut
    A mon grand regret, le résultat est le même avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT * 
    FROM Table_1 
    WHERE FREETEXT((Libelle1,Libelle2), 'france')

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 41
    Points : 41
    Points
    41
    Par défaut
    Toujours pas de solution ???

  5. #5
    Membre habitué Avatar de SILO
    Inscrit en
    Mars 2002
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Mars 2002
    Messages : 192
    Points : 130
    Points
    130
    Par défaut
    essaye :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT * 
    FROM Table_1 
    WHERE libellé_1 like "%france%" or libellé_1 like "%france%"
    Bonne chance

  6. #6
    Rédactrice

    Avatar de Fleur-Anne.Blain
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 637
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 637
    Points : 6 805
    Points
    6 805
    Par défaut
    peut-etre en explicitant le nom de tes colonnes au lieu de *

  7. #7
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    http://msdn2.microsoft.com/en-us/library/ms187787.aspx

    Microsoft semble dire que dans cette syntaxe de contains, c'est un préfixe qu'on donne.

    J'ai la vague sensation que CONTAINS doit plus servir dans les cas où on veut jouer avec de la sémantique que pour faire de la recherche brutale (avec LIKE).

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 41
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par SILO Voir le message
    essaye :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT * 
    FROM Table_1 
    WHERE libellé_1 like "%france%" or libellé_1 like "%france%"
    Bonne chance
    Le but au final est de faire une recherche dans toutes les tables de la db. Une syntaxe avec des LIKE et des OR poserait des problèmes de perfs comparé à l'utilisation du full indexes..
    Merci

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 41
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par Fleur-Anne.Blain Voir le message
    peut-etre en explicitant le nom de tes colonnes au lieu de *
    Bonjour,
    j'ai essayé en listant les champs mais cela ne change rien...

  10. #10
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Citation Envoyé par MKITONE Voir le message
    Le but au final est de faire une recherche dans toutes les tables de la db. Une syntaxe avec des LIKE et des OR poserait des problèmes de perfs comparé à l'utilisation du full indexes..
    Merci
    Je pense justement que c'est pour ce genre de raison que tu ne peux pas faire les recherches que tu voudrais... un index en suffixe, c'est assez rare.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 41
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par pacmann Voir le message
    Je pense justement que c'est pour ce genre de raison que tu ne peux pas faire les recherches que tu voudrais... un index en suffixe, c'est assez rare.
    Je ne comprends pas.. Ce qui est d'autant plus étrange, c'est que la doc le décris comme utilisable ainsi. De plus, la recherche avec "souf*" renvoit bien ce qu'elle devrait... Alors pourquoi dan sun sens et pas dans l'autre ?? Cela pourrait-il être du à ma version (2008 béta) ??

  12. #12
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Franchement, en regardant la syntaxe, j'ai pas l'impression que *mot* soit prévu...
    Après, s'il faut une raison, je dirais que la notion de préfixe est très proche de la notion d'indexe, alors que celle de suffixe pas du tout.
    Par exemple, te viendrait-il à l'idée de construire un annuaire des noms par mot contenu ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
       CONTAINS   ( { column_name | (column_list) | * } 
              , '< contains_search_condition >'     
       [ , LANGUAGE language_term ]
          ) 
    < contains_search_condition > ::= 
        { < simple_term > 
        | < prefix_term > 
        | < generation_term > 
        | < proximity_term > 
        | < weighted_term > 
        } 
        | { ( < contains_search_condition > ) 
        [ { < AND > | < AND NOT > | < OR > } ] 
        < contains_search_condition > [ ...n ] 
        } 
    < simple_term > ::= 
              word | " phrase "
    < prefix term > ::= 
         { "word * " | "phrase *" }
    < generation_term > ::= 
         FORMSOF ( { INFLECTIONAL | THESAURUS } , < simple_term > [ ,...n ] ) 
    < proximity_term > ::= 
         { < simple_term > | < prefix_term > } 
         { { NEAR | ~ }
         { < simple_term > | < prefix_term > } 
         } [ ...n ] 
    < weighted_term > ::= 
         ISABOUT 
            ( { { 
      < simple_term > 
      | < prefix_term > 
      | < generation_term > 
      | < proximity_term > 
      } 
       [ WEIGHT ( weight_value ) ] 
       } [ ,...n ] 
            ) 
    < AND > ::= 
         { AND | & }
    < AND NOT > ::= 
         { AND NOT | & !}
    < OR > ::= 
         { OR | | }

  13. #13
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Points : 1 745
    Points
    1 745
    Par défaut
    peux-tu essayer cela ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT * 
    FROM Table_1 
    WHERE 
    CONTAINS(*,' "*france*" OR "*france" OR "france*" ')

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 41
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par ylarvor Voir le message
    peux-tu essayer cela ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT * 
    FROM Table_1 
    WHERE 
    CONTAINS(*,' "*france*" OR "*france" OR "france*" ')
    Cela ne fonctionne pas non plus...

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 41
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par pacmann Voir le message
    Franchement, en regardant la syntaxe, j'ai pas l'impression que *mot* soit prévu...
    Après, s'il faut une raison, je dirais que la notion de préfixe est très proche de la notion d'indexe, alors que celle de suffixe pas du tout.
    Par exemple, te viendrait-il à l'idée de construire un annuaire des noms par mot contenu ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
       CONTAINS   ( { column_name | (column_list) | * } 
              , '< contains_search_condition >'     
       [ , LANGUAGE language_term ]
          ) 
    < contains_search_condition > ::= 
        { < simple_term > 
        | < prefix_term > 
        | < generation_term > 
        | < proximity_term > 
        | < weighted_term > 
        } 
        | { ( < contains_search_condition > ) 
        [ { < AND > | < AND NOT > | < OR > } ] 
        < contains_search_condition > [ ...n ] 
        } 
    < simple_term > ::= 
              word | " phrase "
    < prefix term > ::= 
         { "word * " | "phrase *" }
    < generation_term > ::= 
         FORMSOF ( { INFLECTIONAL | THESAURUS } , < simple_term > [ ,...n ] ) 
    < proximity_term > ::= 
         { < simple_term > | < prefix_term > } 
         { { NEAR | ~ }
         { < simple_term > | < prefix_term > } 
         } [ ...n ] 
    < weighted_term > ::= 
         ISABOUT 
            ( { { 
      < simple_term > 
      | < prefix_term > 
      | < generation_term > 
      | < proximity_term > 
      } 
       [ WEIGHT ( weight_value ) ] 
       } [ ,...n ] 
            ) 
    < AND > ::= 
         { AND | & }
    < AND NOT > ::= 
         { AND NOT | & !}
    < OR > ::= 
         { OR | | }
    Sorry, c'est vrai qu'en relisant la doc, je ne vois pas la notion de suffixe...
    Mais en utilisant des LIKE et des OR, "bonjour les perfs"

Discussions similaires

  1. Problème résultat dans recherche multicritères
    Par MAMANHOU dans le forum IHM
    Réponses: 36
    Dernier message: 12/06/2010, 19h14
  2. Problème redimensionnement container
    Par goddet dans le forum Windows Forms
    Réponses: 6
    Dernier message: 23/10/2007, 11h38
  3. Problème avec CONTAINS
    Par The eye dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 21/08/2007, 11h49
  4. [SQL] Problème résultat checkbox dans requête SQL
    Par Skeud007 dans le forum PHP & Base de données
    Réponses: 20
    Dernier message: 02/07/2006, 15h02
  5. [SGBD/JDBC] [JAVA/MS ACCESS] problème résultat requête
    Par mouuaahh dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 04/04/2006, 10h31

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