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 :

aide pour une requête


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 56
    Points : 30
    Points
    30
    Par défaut aide pour une requête
    Bonjour je vous écris car j'ai un problème de requête plus que complexe et pour lequel je ne trouve pas de solution =((
    aussi, j'ai grand besoin de votre aide et je remercie d'avance toutes les bonnes âmes qui voudront bien m'aider

    je vous explique mon problème
    à la base j'ai un filtre pour rechercher des dvd par genre (horreur, action...)
    Comme je suis dépendante de catalogue produits qui n'ont jamais les mêmes titres pour une catégorie, j'ai donc créé une table de référence genreRef qui a pour champs : id + typeFilm

    Nom de la table : genreRef
    Nom du champ : typeFilm


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    typeFilm : 
    Fantastique / Science Fiction
    Action / Aventure
    Policier / Thriller
    Horreur
    Comédie
    Animation Jeunesse
    Sport
    Drame
    Arts Martiaux
    ......
    de l'autre coté j'ai une table dvd qui contient toutes les infos de mes films et leur genre en pagaille =(
    le champ qui contient ces infos s'appelle : genre

    Nom de la table : dev
    Nom du champ : genre

    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
     
    genre : 
    Action
    Action - Aventure
    Action - Aventure - Comedie
    Action - Aventure - Espionnage
    Action - Comedie
    Action - Drame
    Action - Espionnage
    Action - Espionnage - Comédie
    Action - Fantastique
    Action - Fantastique - Aventure
    Action - Fantastique - Policier
    Action - Guerre
    Action - Kung Fu
    à la base je gérais mon filtre de recherche avec la requête suivante :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select  typeFilm FROM genreRef, dvd WHERE genre= typeFilm
    mais bien sûr il ne trouve presque rien =(

    ma question : est ce qu'il existe une requête pour faire une espèce de like sur un champ et non une valeur


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select  typeFilm FROM genreRef, dvd WHERE genre LIKE '%typeFilm%'

    si non, =( quelqu'un pourrait il me dire ce que je dois faire =(

    merciiii

  2. #2
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 612
    Points
    58 612
    Billets dans le blog
    11
    Par défaut
    Salut,

    Tu dois pouvoir faire quelque chose comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT  typeFilm FROM genreRef, dvd WHERE genre LIKE '%'||typeFilm||'%'
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT  typeFilm FROM genreRef, dvd WHERE genre LIKE CONCAT('%',typeFilm,'%')
    @+.
    N'oubliez pas le Tag afin de faciliter la recherche, et en votant cela permet de mieux la cibler.

    Je ne réponds pas aux messages privés s'ils sont liés à une question technique

  3. #3
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    Bonjour

    Oui, les requêtes LIKE existent et notamment celle que tu présentes.
    SELECT typeFilm FROM genreRef, dvd WHERE genre LIKE '%typeFilm%'
    Si tu l'avais utilisée, tu l'aurais vu par toi même. Mais les performances de ce type de requêtes ne sont pas top.


    Il est clair que tu as un petit problème dans la structure de ta table.
    Il serait plus judicieux d'avoir une table des genres (n'en contenant qu'un à la fois)
    ...
    Action - Comedie
    Action - Drame
    Action - Espionnage
    ...
    plus comme cela
    Action
    Comedie
    Drame
    Espionnage
    ...
    Et avoir une table associant les films à son ou ses genres (soit 2 colonnes)

    Identifiant_Film
    Identifiant_Genre
    Cela te permettrait de faire des recherches sur les films en utilisant les genres de manière bien plus rapide

    a+
    Merci d'ajouter un sur les tags qui vous ont aidé

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,

    Une autre solution serait de revoir la conception de votre schéma qui m'a l'air bancal.

    Idéalement il vous faudrait des tables de référence :
    Par exemple
    T_GENRE_GEN (id, nom, ....)
    1, 'Action'
    2, 'Aventure'
    3, 'Comedie'
    etc,


    Et une relation entre votre table dvd et cette table qui aura une cardinalité du type (MCD) :
    DVD 1, n ------- 0,n T_GENRE_GEN

    voir la suivante si vous avez la possibilité de saisir un dvd ans lui attribuer de genre :
    DVD 0,n ------- 0,n T_GENRE_GEN

    Quand vous passerez au mpd ceci va se traduire par une création d'une autre table entre ces deux premières tables (pour pouvoir satisfaire cette relation)

    Et là vous n'aurez pas à utiliser de like, et beaucoup de vos requêtes de recherche seront désormais très faciles à utiliser (et plus performantes par la même occasion).

    Bref, si vous voulez fixer votre schéma allez faire un tour du côté du forum de modélisation qui regorge d'exemple pour votre cas actuel.


    edit : pris de vitesse par dehorter olivier

  5. #5
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    SELECT typeFilm FROM genreRef, dvd WHERE genre LIKE '%typeFilm%'

    En effet vous ne pourrez profiter d'aucun indexe.


    Votre modélisation est a revoir.

    Une bonne modélisation= de bonne performance et des requêtes simple a exprimer... et donc à écrire.
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

  6. #6
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    SELECT typeFilm FROM genreRef, dvd WHERE genre LIKE '%typeFilm%'

    Normal votre 'jointure' sans prédicat?(pas de liaison entre les tables genreRef et dvd)?
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

Discussions similaires

  1. Aide pour une requête et left join
    Par Lolo19 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 26/08/2005, 08h09
  2. J'ai besoin de votre aide pour une requête
    Par ovdz dans le forum Langage SQL
    Réponses: 6
    Dernier message: 20/05/2005, 11h42
  3. Demande d'aide pour une requête
    Par arkzor dans le forum Requêtes
    Réponses: 3
    Dernier message: 28/12/2004, 02h40
  4. Besoin d'aide pour une Requête SQL ...
    Par Kokito dans le forum Requêtes
    Réponses: 2
    Dernier message: 07/07/2004, 11h56
  5. besoin d'aide pour une requête
    Par Damien69 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 31/03/2004, 15h38

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