sql >> Databáze >  >> RDS >> Mysql

Hledání odpovídajících značek (Similarity Search) pomocí MySQL a omezení

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;

Při hledání toho, co je „podobné“ 123 (položka-B ve vašem příkladu), by měl výstup

Item-A, 2
Item-C, 1

Toto je úplná kontrola articletag . Takže věnujte pozornost tipům v mé diskusi o mnoha:mnoho mapování .

Pokud po provedení dotazu potřebujete získat informace o článcích, použijte je jako „odvozenou“ tabulku; například:

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

(Můžete odstranit ORDER BY z vnitřního dotazu, protože bude přednostně ignorován před vnějším ORDER BY .)




  1. V `IN ()` v MySQL použijte řetězec oddělený čárkami

  2. C#/SQL:zálohování a obnova zkopírováním a nahrazením databázových souborů?

  3. SQLBulkCopy s vložením identity do cílové tabulky

  4. Moje oblíbená rozšíření PostgreSQL - část druhá