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 :

Liste par genres


Sujet :

Langage SQL

  1. #1
    Membre du Club Avatar de ghost942
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 112
    Points : 50
    Points
    50
    Par défaut Liste par genres
    Bonjour!

    J'ai un petit soucis que je n'arrive pas a résoudre.Je ne m'y connais pas beaucoup en SQL, juste les bases. Peut etre que quelqu'un pourra m'aider.

    J'ai un table [Films] qui possede les champs suivant:

    Titre (string)
    Genre1 (integer) (renvois sur un genre_id)
    Genre2 (integer) (renvois sur un genre_id)
    Genre3 (integer) (renvois sur un genre_id)
    ..

    et une table [Genres]:
    Genre_id (integer)
    Designation (string)

    Ma base est orientée videotheque et j'aimerais pour un film donné pouvoir y placer trois genres possibles. Par contre, je ne sais pas comment obtenir la liste des films par genre sachant qu'un film peut appartenir a plusieurs genres , et donc apparaitre plusieurs fois (c'est le but). Je sèche.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    C'est un problème de modélisation.
    Il te faut faire une table Film et une table d'association entre les Film et les genres.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Table Fillm
    FilmId
    Titre
    ....
     
    Table FilmGenre
    FilmId
    genre_id
    Dans ta table FilmGenre tu mets autant de lignes que ton film a de genre.
    Avec cette structure La liste des films par genre devient.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT FG.genre_id, G.Description, Titre
    From FimGenre FG
    inner join Film on F.genre_id=FG.Genre_id
    innner join Genres G on
    G.genre_id=FG.genre_id
    order by FG.GEnre_id, Titre

  3. #3
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut Re: Liste par genres
    Citation Envoyé par ghost942
    Ma base est orientée videotheque et j'aimerais pour un film donné pouvoir y placer trois genres possibles. Par contre, je ne sais pas comment obtenir la liste des films par genre sachant qu'un film peut appartenir a plusieurs genres , et donc apparaitre plusieurs fois (c'est le but). Je sèche.
    Lorsque l'utilisateur sélectionne les genres, tu récupères l'id puis ceci devrait suffire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT Titre 
    FROM Films
    WHERE Genre1 = idGenre
       OR Genre2 = idGenre
       OR Genre3 = idGenre

  4. #4
    Membre du Club Avatar de ghost942
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 112
    Points : 50
    Points
    50
    Par défaut
    Merci pour ta solution! Je vois bien la méthode.
    Mais je regardais les tutoriaux pour le sql, et je me demandais si l'utilisation de la clause union ne serait pas interessante non plus, et m'eviterais l'ajout d'une nouvelle table.

    select genre, titre from t_film join genres on t_films.genre1=t_genres.id
    union
    select genre, titre from t_film join genres on t_films.genre2=t_genres.id
    union
    select genre, titre from t_film join genres on t_films.genre3=t_genres.id

    En tous cas, ca semble marcher...

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Ta requête me semble équivalente à celle de Xo mais en terme de performances, je pense (à confirmer par les autres ) que la clause UNION est plus coûteuse. Maintenant ça n'a pas peut être d'incidence majeure étant donné la taille des données que tu manipules.

    Concernant la bidouille que tu fais pour éviter de modifier le schéma de ta base, il faut savoir que tu devras modifier ta requête si tu prévois de stocker un nouveau genre dans ta table Genre (ou d'en supprimer un).

  6. #6
    Membre du Club Avatar de ghost942
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 112
    Points : 50
    Points
    50
    Par défaut
    Si je vois que mon programme traine la patte au traitement de cette requête, je pense que je m'orienterais plutot vers la méthode proposée par Xo. Je manipule pas mal de champs blobs (image, mémos...). Pour le moment ma base n'est pas trop remplie car je continue a developper mon programme,donc je n'ai pas un apercu objectif des perfs.
    Qui requetera, verra!
    (D'ailleurs je conseille a ceux qui programme en delphi, le composant Absolute Database d'Ace Component)

    Merci pour votre aide.

  7. #7
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    La requête proposée avec UNION fonctionne aussi, mais on utilise,plutôt ce type de requêtes quand on doit réunir des données de provenances diverses sous le même format

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

Discussions similaires

  1. Remplir une Liste par SQL ?
    Par Zigouigoui dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 03/12/2005, 17h08
  2. Tri d'une zone de liste par bouton
    Par illight dans le forum Access
    Réponses: 7
    Dernier message: 09/11/2005, 19h39
  3. [Formulaire] filtrer liste par choix dans autre liste
    Par vatounet dans le forum Access
    Réponses: 4
    Dernier message: 05/10/2005, 15h57
  4. mise à jour d'une liste par un popup
    Par Equus dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 25/02/2005, 11h21
  5. Multiplier une liste par 2
    Par mdswiuf dans le forum Prolog
    Réponses: 8
    Dernier message: 31/01/2005, 18h27

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