我需要向访客推荐与他们所看到的相似的项目。所以我在another question中询问了SQL查询以获取具有相同类别的项目(来自'categories'表)。接下来是我实际使用的正确代码:
SELECT c2.itemID
FROM categories c1
JOIN categories c2 ON c1.catID = c2.catID
WHERE c1.itemID = :id
AND c2.itemID <> :id
GROUP BY c2.itemID
ORDER BY count(c2.itemID) DESC;
它返回按类别匹配的数量排序的项目(来自包含'itemIDs'和'catIDs'的表)。例如:项目1具有类别2,3,4,5,6,项目2具有类别2,3,4,5,6,项目3具有类别3,5,6然后如果我比较项目1(一个访问者正在查看第2项和第3项我需要先获得第2项,然后获得第3项,因为第2项比第3项有更多类别匹配。
现在:我还需要以最高票数订购结果。项目投票在不同的表格中。表'投票'包含两列:'itemID'和'total_value','total_value'是最终费率。
那么,如何通过类别匹配的数量以及来自不同表格的最高投票来订购结果???
更新:表格中的项目数为8000+时的数字。我认为推荐最相似的项目更好的做法是首先按照具有确切类别的项目然后通过投票来订购它。有任何想法吗?谢谢!
答案 0 :(得分:1)
SELECT c2.itemID
FROM categories c1
JOIN categories c2 ON c1.catID = c2.catID
JOIN votes v ON v.itemID=c1.itemId
WHERE c1.itemID = :id
AND c2.itemID <> :id
GROUP BY c2.itemID
ORDER BY count(c2.itemID), v.total_value DESC;