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
.)