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

Requêtes MySQL Discussion :

Votre avis sur ma requête SQL


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2009
    Messages : 81
    Points : 48
    Points
    48
    Par défaut Votre avis sur ma requête SQL
    Bonjour, je souhaiterais avec votre avis une requête que je viens de faire pour mon moteur de recherche multicritères (je donne la requête complète pour tous les critères sélectionnés)


    J'ai donc comme TABLE :

    - t_films
    - t_liens
    - t_genres
    - t_hebergeurs
    - t_nationalites

    On peut donc chercher un film avec une date + une nationalité + ...

    Un film possède 1 ou N liens
    Un film possède 1 et 1 seul genre
    Un film possède 1 et 1 seul nationalite
    Un lien possède 1 et 1 seul hebergeur
    Un hébergeur possède 0 ou N liens
    Une nationalité possède 0 ou N films

    Donc voici ma requête... elle fonctionne mais je préfère avoir votre avis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT * FROM t_films 
    INNER JOIN t_genres ON film_genre = genre_id 
    INNER JOIN t_nationalites ON film_nationalite = nationalite_id 
    WHERE film_genre='4' 
    AND film_nationalite='1' 
    AND film_date BETWEEN 2000 AND (2000 + 10) 
    AND (SELECT count(*) FROM t_liens INNER JOIN t_hebergeurs ON lien_hebergeur = hebergeur_id WHERE lien_hebergeur = 1 AND film_id = lien_film) > 0 
    ORDER BY film_note DESC LIMIT 0, 10
    Merci d'avance

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    1/Évitez le SELECT *. Spécifiez explicitement les colonnes que vous voulez récupérer.

    2/Si les colonnes film_genre et film_nationalite sont des entiers comme je le pense, ne mettez pas de guillemets.

    3/ Remplacez votre SELECT count(*) ... > 0 par un EXISTS...
    quel est le type de la colonne film_date ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2009
    Messages : 81
    Points : 48
    Points
    48
    Par défaut
    1 - Pour le SELECT(*) je sais mais pour afficher la requête ça ne le fait pas

    2 - Effectivement se sont des entiers.

    3 - merci je ne connaissais pas

    Sinon date = INT 4

    Mais au niveau de mes INNER JOIN c'est ok ?

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par deli2025 Voir le message
    1 - Pour le SELECT(*) je sais mais pour afficher la requête ça ne le fait pas
    Pourquoi ?

    Sinon date = INT 4
    Pourquoi ne pas avoir appelé la colonne "film_annee" alors ?

    Mais au niveau de mes INNER JOIN c'est ok ?
    Oui.

    Autres remarques...

    C'est peut-être un choix délibéré de votre part mais un film peut avoir plusieurs nationalités.

    Idem pour l'année, si c'est celle de production. La production d'un film peut couvrir plusieurs années.

    Enfin, pour revenir à une considération purement informatique, nommez vos tables et colonnes au singulier.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2009
    Messages : 81
    Points : 48
    Points
    48
    Par défaut
    Oui pour l'instant les films on seulement une nationalité. Je travail sur une base de donnée existante qui n'était pas relationnel ^^

    Justement à ce propos, le(s) réalisateur(s) étaient présent directement sur la fiche du film dans un varchar....

    J'ai donc recrée une table réalisateur que j'ai alimenter depuis la table films

    La table films contient maintenant la clé du réalisateur mais je souhaiterais permettre plusieurs réalisateurs pour un film. J'ai donc crée une table réalise_par (Clé unique en varchar = id_film-id_realisateur, id_film, id_realisateur) et je souhaiterais l'alimenter automatiquement pour tous les films présent dans la table films.

    Mais franchement je ne vois pas du tout comment faire...

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO realise_par (id_film, id_realisateur)
    SELECT id_film, id_realisateur
    FROM film
    ORDER BY id_film, id_realisateur
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2009
    Messages : 81
    Points : 48
    Points
    48
    Par défaut
    Oui mais ma table realiser_par demande une clé primaire en varchar composé de l'id_film + "-" + l'id_realisateur

    Comme cela un réalisateur ne peut pas réaliser 2 fois le même film...

  8. #8
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Ce n'est pas une bonne idée :
    La clef primaire devrait être numérique et surtout n'avoir aucune signification.

    Cela dit ,dans ce cas précis, votre table "realise_par" pourrait n'avoir que deux colonnes (realisateur_id, film_id), et la clef primaire serait composée de ces deux colonnes.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2009
    Messages : 81
    Points : 48
    Points
    48
    Par défaut
    Oui j'y ai pensé mais le fait que la clé primaire va être composé avec 2 clé primaire numérique cela ne va pas poser problème ??

    Genre :

    film_id = 2
    realisateur_id = 22

    Donc clé = 222

    Mais si

    film_id = 22
    realisateur_id = 2

    clé = 222 aussi...

    PS: déso mais je suis une daube en sql

  10. #10
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Non ! La clé primaire d'une table associative est composée de l'ensemble des colonnes porteuses des clés étrangères référençant les tables associées.

    Comme c'est visible dans ma requête, la table realise_par doit avoir deux colonnes id_film et id_realisateur et la clé primaire est composée de l'ensemble de ces deux colonnes.
    Ainsi, le couple {2, 22} est bien différent du couple {22, 2}.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2009
    Messages : 81
    Points : 48
    Points
    48
    Par défaut
    Ha ok lol

    Je sortirais moins bête de cette conversation !

    Merci à vous deux

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2009
    Messages : 81
    Points : 48
    Points
    48
    Par défaut
    Encore un petite chose... Tout fonctionne parfaitement mais cela me sort x fois le résultat en fonction du nombre de réalisateurs...

    Si le film en a deux, le film sort deux fois...

  13. #13
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par deli2025 Voir le message
    Encore un petite chose... Tout fonctionne parfaitement mais cela me sort x fois le résultat en fonction du nombre de réalisateurs...

    Si le film en a deux, le film sort deux fois...
    Oui, c'est normal, une fois avec l'un des réalisateurs, une seconde fois avec l'autre...

    Comment voudriez vous que ça sorte ?

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2009
    Messages : 81
    Points : 48
    Points
    48
    Par défaut
    il n'y a pas moyen de faire le résultât sur une ligne avec simplement une colonne en plus pour le 2eme réalisateur ?

  15. #15
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Si, mais s'il y a trois réalisateurs ?

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2009
    Messages : 81
    Points : 48
    Points
    48
    Par défaut
    Non je parle de l'affichage du résultât...

  17. #17
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    oui, justement, vous voulez ajouter une deuxième colonne pour mettre l’éventuel deuxième réalisateur... Mais que faire de l’éventuel troisième ? une troisième colonne ?

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2009
    Messages : 81
    Points : 48
    Points
    48
    Par défaut
    Non... Pour afficher la fiche d'un film, j'affiche son titre, son (ses) réalisateur(s),...

    Là sa double la fiche... Je voudrais afficher les 2 réalisateurs sur la même fiche...

    Il y a moyen de le faire en une requête ou je dois en faire 2 ?

  19. #19
    Membre expérimenté
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Points : 1 631
    Points
    1 631
    Par défaut
    Bonsoir,

    vous ne répondez pas à la question d'aieeeuuuuu,

    votre film a deux réalisateurs donc vous voulez avoir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    nom    |   real1    |    real2
    Film   |    toto    |    tata
    seulement si un jours vous avez un film avec 3 réalisateurs que voulez vous qu'il se passe ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    nom    |   real1    |    real2    |    real3
    Film   |    toto    |    tata     |    titi
    Car cela n'est pas possible, avec MySQL, d'ajouter à la volée des colonnes selon un éventuel calcul (nbr de realisateur),
    une réponse vous a permis d'avancer ?

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2009
    Messages : 81
    Points : 48
    Points
    48
    Par défaut
    je pensais avoir répondu...

    Il n'y a pas de champs réalisateur dans film. Mais une autre table contenant l'id du film et l'id du réalisateur.

    Maintenant, si je sélectionne un film qui à deux réalisateurs, j'ai comme résultât

    Nom Film | Réalisateur
    ----------------------------
    Matrix | Andy W...
    Matrix | Lana W...

    Donc je voulais savoir si pour afficher le résultat dans une page web, il a moyen de sortir tout en une requête ou deux...

    SELECT * FILM
    SELECT * REALISATEUR DU FILM

Discussions similaires

  1. Votre avis sur deux requètes SQL
    Par americ dans le forum Développement
    Réponses: 6
    Dernier message: 05/11/2014, 16h25
  2. Donnez votre avis sur les articles de Developpez.com
    Par Geronimo dans le forum C++Builder
    Réponses: 13
    Dernier message: 14/01/2007, 22h00
  3. Donnez votre avis sur les articles de Developpez
    Par Anomaly dans le forum Contribuez
    Réponses: 37
    Dernier message: 29/05/2006, 21h48
  4. [Débat] Votre avis sur la section "Dev Web"
    Par Marc Lussac dans le forum Evolutions du club
    Réponses: 31
    Dernier message: 03/03/2004, 20h55
  5. Votre avis sur 1 livre SVP
    Par cab dans le forum DirectX
    Réponses: 4
    Dernier message: 17/09/2003, 10h39

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