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;
Khi tìm kiếm những gì 'tương tự' với 123 (Mục-B trong ví dụ của bạn), đầu ra sẽ
Item-A, 2
Item-C, 1
Đây là bản quét đầy đủ articletag
. Vì vậy, tôi đã chú ý đến các mẹo trong cuộc thảo luận của tôi về nhiều:nhiều ánh xạ
.
Nếu bạn cần lấy thông tin về các bài báo sau khi thực hiện truy vấn, hãy sử dụng nó như một bảng 'dẫn xuất'; ví dụ:
SELECT articles.*
FROM ( the above SELECT ) AS x
JOIN articles USING(articleid)
ORDER BY x.ct DESC;
(Bạn có thể xóa ORDER BY
từ truy vấn bên trong, vì nó sẽ bị bỏ qua theo sở thích đối với ORDER BY
bên ngoài .)