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 :
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 :
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 !
Partager