java - 根据产品功能排名

标签 java mysql ranking

我在mysql中有下表数据库:

  1. 产品

    • 产品 ID
    • 产品名称
    • 产品类别id_fk
  2. 产品功能

    • feature_id
    • 产品id_fk
    • 功能名称

我需要根据产品的功能为产品添加排名功能,

排名将从 1 到 100 开始,例如根据产品的功能,

为每个功能赋予一个“权重”,并将产品的总体“分数”定义为其组件功能的总和,

权重是实现这一目标的一种方法,

最终将用于比较同一类别的产品,

您能否提出以下建议:

  • 我需要添加哪些新表格
  • 我需要向现有表格中添加哪些列
  • 如何计算与表格关联的排名

所有帮助将不胜感激

最佳答案

  1. 为每个特征赋予权重:

    ALTER TABLE product_features ADD COLUMN weight INT;
    UPDATE product_features SET weight = ? WHERE feature_id = ?; -- and repeat
    
  2. 选择产品(结合其功能然后分组),按总分排序:

    SELECT   p.*, SUM(f.weight) AS score
    FROM     products p
        JOIN product_features f ON f.product_id_fk = p.product_id
    GROUP BY p.product_id
    ORDER BY score DESC
    
  3. 或者获取特定产品的排名:

    SELECT 1+COUNT(*) AS rank FROM (
      SELECT   NULL
      FROM     product_features
      GROUP BY product_id_fk
      HAVING   SUM(weight) > (
                 SELECT SUM(weight)
                 FROM   product_features
                 WHERE  product_id_fk = ?   -- your product_id here
               )
    ) t
    

关于java - 根据产品功能排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38718462/

相关文章:

java - 为什么layout_gravity设置为left/right在水平LinearLayout中没有效果?

java - 如何使用 Selenium 和 Java 禁用 Chrome 中的 cookie

java - 当鼠标悬停在两个面板的交叉区域时更改光标

python - 为 Django 项目导入设置

PHP 驱动的详尽统计数据 - 服务器端文本文件或 MySQL 表?

mysql - 从带有 "effective date"的表构建每日 View

python - 对电子邮件的优先级列表进行排名

algorithm - 基于 Upvotes 和 Views 的排名算法,没有 downvotes

java - Android 上的分段上传图像进度