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-A, 2
Item-C, 1
यह articletag
. का पूरा स्कैन है . इसलिए, many:many मैपिंग
।
यदि आपको क्वेरी करने के बाद लेखों के बारे में जानकारी प्राप्त करने की आवश्यकता है, तो इसे 'व्युत्पन्न' तालिका के रूप में उपयोग करें; उदाहरण के लिए:
SELECT articles.*
FROM ( the above SELECT ) AS x
JOIN articles USING(articleid)
ORDER BY x.ct DESC;
(आप ORDER BY
को हटा सकते हैं आंतरिक क्वेरी से, क्योंकि इसे बाहरी ORDER BY
. की वरीयता में अनदेखा कर दिया जाएगा ।)