Mysql
 sql >> Database >  >> RDS >> Mysql

Cerca i tag corrispondenti (Ricerca di somiglianza) con MySQL e Vincoli

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;

Quando cerchi ciò che è "simile" a 123 (Elemento-B nel tuo esempio), l'output dovrebbe

Item-A, 2
Item-C, 1

Questa è una scansione completa di articletag . Quindi, ascolta i suggerimenti nella mia discussione su many:many mapping .

Se hai bisogno di ottenere informazioni sugli articoli dopo aver eseguito la query, usala come tabella 'derivata'; ad esempio:

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

(Puoi rimuovere il ORDER BY dalla query interna, poiché verrà ignorata di preferenza a quella esterna ORDER BY .)