SELECT c.articleid, COUNT(*) AS ct
FROM articletag AS b
JOIN articletag AS c ON c.tagid = b.tagid
AND c.articleid != b.articleid
WHERE b.articleid = 123
GROUP BY c.articleid
ORDER BY ct DESC;
Al buscar lo que es 'similar' a 123 (Ítem-B en su ejemplo), la salida debería
Item-A, 2
Item-C, 1
Este es un escaneo completo de articletag
. Entonces, preste atención a los consejos en mi discusión de many:many mapping
.
Si necesita obtener información sobre los artículos después de realizar la consulta, utilícelo como una tabla 'derivada'; por ejemplo:
SELECT articles.*
FROM ( the above SELECT ) AS x
JOIN articles USING(articleid)
ORDER BY x.ct DESC;
(Puede eliminar el ORDER BY
de la consulta interna, ya que será ignorada en preferencia a la externa ORDER BY
.)