sql >> Base de Datos >  >> RDS >> Mysql

Busque etiquetas coincidentes (búsqueda de similitud) con MySQL y restricciones

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 .)