Comment répertorier les articles de blog associés classés par nombre d'étiquettes communes?
Question
Je souhaite afficher une liste d'articles de blog associés et je souhaite que la liste soit triée en fonction du nombre de balises courantes associées à l'article en cours. Chaque publication peut avoir plusieurs tags associés. Voici la structure de ma table:
[Posts] < - [posts-to-tags-join-table] - > [Tags]
J'utilise PHP et MySQL. Puis-je le faire en une seule requête?
La solution
Qu'en est-il de ...:
SELECT COUNT(*) AS numcommon, posts.pid, posts.post FROM posts
INNER JOIN p2t ON p2t.pid = posts.pid
WHERE p2t.tid IN
(SELECT p2t.tid FROM p2t
INNER JOIN posts ON p2t.pid = posts.pid
WHERE posts.pid = 1)
AND posts.pid != 1
GROUP BY posts.pid
ORDER BY numcommon
en supposant que pid est la clé primaire dans la table des publications, tid en tant que clé primaire dans la table des balises, les deux clés étrangères de la table p2t (publication sur balise)?
Autres conseils
Bien sûr, vous pouvez le faire en une seule requête:
SELECT postid, count(tagid) as common_tag_count
FROM posts_to_tags
WHERE tagid IN (SELECT tagid FROM posts_to_tags WHERE postid = 2)
GROUP BY postid ORDER BY common_tag_count DESC;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow