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 :

Optimisations requête avec jointures


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 8
    Points : 8
    Points
    8
    Par défaut Optimisations requête avec jointures
    Bonsoir à tous,

    j'ai une requête assez lourde (13 secondes) et je pense que je ne m'y prends pas de la bonne manière.
    Voilà, j'ai une base de donnée de films et je souhaite les comparer pour trouver des films similaires.
    Pour chaque films, j'ai des tags associés (pour le moment au moins une cinquantaine par films).
    Donc, pour trouver des films similaires, je compare les tags et je garde que les 10 films avec le plus de tags identiques.

    Voilà 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
    15
    SELECT 
    	films.imdb_id
    	COUNT(DISTINCT(films_tag.id_tag)) AS nbr_tags_similaires
    		FROM 
    			films
    				LEFT JOIN 
    					films_tag 
    				ON films_tag.imdb_id = films.imdb_id AND (films_tag.id_tag = 84 OR films_tag.id_tag = 447 OR films_tag.id_tag = 312)
    			WHERE 
    				films.imdb_id != 0462499 AND
    					GROUP BY 
    						films.imdb_id 
    							ORDER BY 
    								nbr_tags_similaires DESC
    									LIMIT 0,10
    Je n'ai mis qu'une comparaison avec 3 tags pour que ça soit un minimum lisible.

    Comment remplacer le :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND (films_tag.id_tag = 84 OR films_tag.id_tag = 447 OR films_tag.id_tag = 312)
    par quelque chose de plus "propre" et moins lourd ?

    Si vous voulez, je peux fournir un script SQL pour que vous puissiez "essayer" de votre côté.

    J'espère que vous pourrez m'aider !

    PS: J'ai volontairement doublonné mon message, mais je m'étais trompé de forum. Et j'ai pas trouvé de méthode pour déplacer... pas taper
    Voilà le lien du message à supprimer :
    http://www.developpez.net/forums/d82...ete-jointures/

    Merci d'avance !

  2. #2
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    De toutes façons ta requête contient une erreur de syntaxe le AND du WHERE suivi immédiatement du GROUP BY
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT films.imdb_id
           COUNT(DISTINCT(films_tag.id_tag)) AS nbr_tags_similaires
    FROM films
    LEFT JOIN films_tag USING (imdb_id)
    WHERE films.imdb_id != 0462499 
          AND films_tag.id_tag IN(84,312,447)
    GROUP BY films.imdb_id 
    ORDER BY nbr_tags_similaires DESC
    LIMIT 0,10
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

Discussions similaires

  1. Optimisation requête avec jointures
    Par Gingirou dans le forum Langage SQL
    Réponses: 10
    Dernier message: 15/11/2012, 22h58
  2. Optimisation requête avec jointure externe SQL Server
    Par ICEMAN_60 dans le forum Développement
    Réponses: 2
    Dernier message: 28/11/2011, 10h08
  3. [SQL 2000] Optimisation requête avec jointure multiple
    Par zooffy dans le forum Développement
    Réponses: 5
    Dernier message: 18/09/2007, 15h38
  4. [SQL 2000] Optimisation requête avec jointure multiple
    Par zooffy dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 18/09/2007, 15h38
  5. optimisation requête avec jointures externes
    Par beurtom dans le forum Oracle
    Réponses: 14
    Dernier message: 16/10/2006, 16h50

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