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;
123(この例ではItem-B)に「類似」しているものを検索する場合、出力は次のようになります
Item-A, 2
Item-C, 1
これはarticletag
のフルスキャンです 。したがって、 many:many Mapping>
。
クエリの実行後に記事に関する情報を取得する必要がある場合は、それを「派生」テーブルとして使用します。例:
SELECT articles.*
FROM ( the above SELECT ) AS x
JOIN articles USING(articleid)
ORDER BY x.ct DESC;
(ORDER BY
を削除できます 外側のORDER BY
よりも優先して無視されるため、内側のクエリから 。)