php - SQL/PHP : Order by highest vote from different table

标签 php sql mysql

我需要向访问者推荐与他们正在查看的商品类似的商品。所以我在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/

相关文章:

php - 为 PDF 页面添加标题 [FPDF]

php - 将代码片段插入数据库并在文本区域中以相同方式显示

javascript - 使用 Knex,如何将连接表的相关行作为嵌套对象给出?

database - 单个查询或多个查询

php - 在 MySQL 中查询时连接表

php - MYSQL 根据多行从表中选择

php - Mysql从一个表中选择多个id插入到另一个表中

sql - 对多个 customDimensions 进行过滤然后聚合

mysql - 如何在MySQL中安装InnoDB插件

mysql - sql - 将列属性更改为唯一