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

Développement SQL Server Discussion :

Problème sur requête select avec les caractères spéciaux


Sujet :

Développement SQL Server

  1. #1
    Membre confirmé Avatar de Julien698
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2013
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2013
    Messages : 237
    Points : 473
    Points
    473
    Par défaut Problème sur requête select avec les caractères spéciaux
    Bonjour à tous,

    Je me permet de vous écrire car je suis tombé sur un vrai casse tête en voulant faire un SELECT et je n'ai pas trouvé de solution qui convienne, peut-être aussi que je m'y prends mal

    Je cherche à faire un SELECT sur des champs de deux tables différentes avec comme seul point en commun un champ (varchar) qui peut comporter des accents pas moment.

    Pour celà voici la requête que j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SELECT DISTINCT TOP 15
    mv.Id,
    mv.[Rank],
    th.Id,
    mv.Title,
    mv.Synopsis,
    mv.Image
     
    FROM
    Thematics th JOIN MovieCollection mv
    ON th.Name COLLATE French_CI_AI LIKE mv.Categories COLLATE French_CI_AI +'%'
    WHERE th.Id = 1065
    ORDER BY [Rank] DESC
    J'ai volontairement ajouté collate pour les mots clef pensant que ça allait retirer la sensibilité aux accents avec AI mais ça n'a rien changé .

    La table Thematics, rassemble toutes les catégories de films donc (Action, Aventure etc...) et MovieCollection tous les infos sur les films saisis. Le champ mv.Categories peut être composé de plusieurs noms de thématiques comme Action,Aventure...

    Lorsque je mets l'id 1065 je cherche à sélectionner tous les films de thématique "Comédie", Malheureusement à cause de l'accent ça ne passe pas et je ne comprends pas pourquoi (c'est la seule de mes thématiques à avoir un accent).

    Je précise que 'Comédie' est écrit exactement de la même manière dans chacune des deux tables.

    Avez-vous une idée pour résoudre ce problème ?

    Merci

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    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 768
    Points : 52 565
    Points
    52 565
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Julien698 Voir le message
    .... Le champ mv.Categories peut être composé de plusieurs noms de thématiques comme Action,Aventure...
    Si vous avez mis plusieurs informations dans cette colonne, alors vous avez violé la première forme normale et il est normal que vous ne trouviez pas ce que vous chercher.

    Commencez par normaliser correctement votre base en ajoutant une table de jointure (aussi appelée table d'association) entre votre table des films et celle des catégories.
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE TABLE T_J_FILM_CATEGORIE
    (CTG_ID        INT NOT NULL REFERENCES T_CATEGORIE (CTG_ID),
     FLM_ID        INT NOT NULL REFERENCES T_FILM (FLM_ID),
     CONSTRAINT PRIMARY KEY (CTG_ID, FLM_ID));
    Vous pourrez alors multicatégoriser vos films, et votre recherche seront faciles et performantes, ce qui n'est pas le cas actuellement !

    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/ * * * * *

  3. #3
    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 : 42
    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
    Bonjour,

    Avez-vous tenté la chose suivante ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LIKE +'%' mv.Categories COLLATE French_CI_AI
    Si cela ne fonctionne toujours pas, pourriez vous nous donner le DDL de création des tables ?

    Cela étant, votre modélisation est à revoir, car la table MovieCollection devrait référencer la table Thematics, ce qui vous permettrait de réaliser une jointure sur des entiers, nécessairement plus rapide qu'une jointure sur des chaînes de caractères, surtout quand les accents et la casse entrent en jeu.

    @++

  4. #4
    Membre confirmé Avatar de Julien698
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2013
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2013
    Messages : 237
    Points : 473
    Points
    473
    Par défaut
    Bonjour,

    Oui j'ai également essayé cette méthode pensant qu'il pouvait y avoir des caractères avant le mot clef.

    J'ai finalement trouvé une solution à mon problème, ne voulant pas modifier les tables, j'ai mis une condition if pour le cas de la thématique comédie. Je compte bien revoir la modélisation par la suite, car ce n'est pas vraiment optimisé !

    merci pour vos indications.

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

Discussions similaires

  1. Problème avec les caractère spéciaux netvibes
    Par alas70 dans le forum Langage
    Réponses: 1
    Dernier message: 02/03/2007, 11h59
  2. Réponses: 13
    Dernier message: 06/11/2006, 01h55
  3. Problème avec les caractères spéciaux
    Par vincentj dans le forum Connexion aux bases de données
    Réponses: 1
    Dernier message: 01/09/2006, 15h49
  4. problème avec les caractères spéciaux
    Par jmarc1818 dans le forum Général Python
    Réponses: 1
    Dernier message: 16/03/2006, 15h55
  5. [SAX] Problème avec les caractères spéciaux
    Par abdou.sahraoui dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 18/07/2005, 10h07

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