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;
Saat mencari apa yang 'mirip' dengan 123 (Item-B dalam contoh Anda), outputnya harus
Item-A, 2
Item-C, 1
Ini adalah pemindaian lengkap articletag
. Jadi, perhatikan tips dalam diskusi saya tentang many:many mapping
.
Jika Anda perlu mendapatkan informasi tentang artikel setelah melakukan kueri, gunakan itu sebagai tabel 'turunan'; misalnya:
SELECT articles.*
FROM ( the above SELECT ) AS x
JOIN articles USING(articleid)
ORDER BY x.ct DESC;
(Anda dapat menghapus ORDER BY
dari kueri dalam, karena akan diabaikan dalam preferensi ke ORDER BY
luar .)