sql >> Database >  >> RDS >> Mysql

Zoeken naar overeenkomende tags (Similarity Search) met MySQL en 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;

Bij het zoeken naar wat 'vergelijkbaar' is met 123 (item-B in uw voorbeeld), zou de uitvoer moeten

Item-A, 2
Item-C, 1

Dit is een volledige scan van articletag . Let dus op de tips in mijn bespreking van many:many mapping .

Als u informatie over de artikelen wilt krijgen nadat u de zoekopdracht heeft uitgevoerd, gebruik deze dan als een 'afgeleide' tabel; bijvoorbeeld:

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

(U kunt de ORDER BY verwijderen van de binnenste zoekopdracht, omdat deze wordt genegeerd in plaats van de buitenste ORDER BY .)




  1. Services met ontbrekende/niet-beschikbare afhankelijkheden

  2. Kan geen verbinding maken met mysql vanuit visual studio 2015

  3. Selecteer met twee tellingen in dezelfde kolom

  4. Error 1038 Out of sort memory, overweeg om de sorteerbuffer te vergroten