Mysql
 sql >> Base de données >  >> RDS >> Mysql

Recherche de balises correspondantes (recherche de similarité) avec MySQL et les contraintes

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;

Lors de la recherche de ce qui est "similaire" à 123 (Item-B dans votre exemple), la sortie devrait

Item-A, 2
Item-C, 1

Ceci est une analyse complète de articletag . Alors, tenez compte des conseils de ma discussion sur many:many mapping .

Si vous avez besoin d'obtenir des informations sur les articles après avoir effectué la requête, utilisez-les comme une table « dérivée » ; par exemple :

SELECT articles.*
    FROM ( the above SELECT ) AS x
    JOIN articles USING(articleid)
    ORDER BY x.ct DESC;

(Vous pouvez supprimer le ORDER BY de la requête interne, puisqu'elle sera ignorée de préférence au ORDER BY externe .)