我需要向访问者推荐与他们正在查看的商品类似的商品。所以我在another question中询问用于 SQL 查询以获取具有相同类别的项目(从“类别”表)。接下来是我实际使用的正确代码:
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 有更多的类别匹配。
现在:我还需要按最高投票对结果进行排序。项目投票位于不同的表中。表“votes”包含两列:“itemID”和“total_value”,“total_value”是最终比率。
那么,如何按类别匹配数以及不同表中的最高投票对结果进行排序???
更新:表格中的项目数为 8000+。我认为推荐最相似的商品的更好方法是首先按具有确切类别集的商品进行排序,然后通过投票进行排序。有任何想法吗?谢谢!
最佳答案
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;
关于php - SQL/PHP : Order by highest vote from different table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3380102/