¿Cómo enumero las publicaciones de blog relacionadas ordenadas por la cantidad de etiquetas comunes?
Pregunta
Deseo mostrar una lista de publicaciones de blog relacionadas y quiero que se ordene por la cantidad de etiquetas comunes que tienen en la publicación actual. Cada publicación puede tener múltiples etiquetas asociadas. Aquí está la estructura de mi tabla:
[Posts] < - [posts-to-tags-join-table] - > [Etiquetas]
Estoy usando PHP y MySQL. ¿Puedo hacer esto en una consulta?
Solución
¿Qué pasa con ...:
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
suponiendo que pid como la clave principal en la tabla de publicaciones, tid como la clave principal en la tabla de etiquetas, ambas claves externas en la tabla p2t (publicar en la etiqueta)?
Otros consejos
Claro que puedes hacerlo en una consulta:
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;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow