Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Pesquise tags correspondentes (Pesquisa de semelhança) com MySQL e restrições

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;

Ao pesquisar o que é 'semelhante' a 123 (Item-B no seu exemplo), a saída deve
Item-A, 2
Item-C, 1

Esta é uma verificação completa de articletag . Portanto, preste atenção às dicas em minha discussão sobre many:many mapping .

Se você precisar obter informações sobre os artigos após realizar a consulta, use-a como uma tabela 'derivada'; por exemplo:
SELECT articles.*
    FROM ( the above SELECT ) AS x
    JOIN articles USING(articleid)
    ORDER BY x.ct DESC;

(Você pode remover o ORDER BY da consulta interna, pois ela será ignorada de preferência à externa ORDER BY .)