Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Suche nach übereinstimmenden Tags (Ähnlichkeitssuche) mit MySQL und Constraints

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;

Wenn Sie nach etwas suchen, das 123 „ähnlich“ ist (in Ihrem Beispiel Artikel-B), sollte die Ausgabe

sein
Item-A, 2
Item-C, 1

Dies ist ein vollständiger Scan von articletag . Beachten Sie also die Tipps in meiner Diskussion über many:many-Mapping .

Wenn Sie nach der Abfrage Informationen zu den Artikeln benötigen, verwenden Sie diese als „abgeleitete“ Tabelle; zum Beispiel:

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

(Sie können den ORDER BY entfernen aus der inneren Abfrage, da sie gegenüber dem äußeren ORDER BY bevorzugt ignoriert wird .)