我在$obj = PHPExcel_IOFactory::load('excel.xlsx');
$reportWriter = new PHPExcel_Writer_Excel2007($obj);
$reportWriter->setIncludeCharts(true);
header('Content-type: application/vnd.ms-excel;charset=UTF-8');
header('Content-Disposition: attachment;filename=excel.xlsx');
header('Cache-Control: max-age=0');
$reportWriter->save('php://output');
数据库中有以下表格:
产品
product_features
我需要根据产品的功能为产品添加排名设施
排名将从1到100开始,例如取决于产品的功能,
为每个功能提供重量"并定义产品的总体评分"作为其组件功能的总和,
权重是实现这一目标的一种方式,
最终它将用于比较同一类别的产品
您能否提出以下建议:
所有帮助将不胜感激
答案 0 :(得分:1)
为每个功能赋予权重:
ALTER TABLE product_features ADD COLUMN weight INT;
UPDATE product_features SET weight = ? WHERE feature_id = ?; -- and repeat
选择产品(与其功能相结合,然后分组),按总分排序:
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
或者获取特定产品的排名:
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
答案 1 :(得分:1)
首先,您需要为功能创建一个单独的表格,其中相关权重(如小)的权重为1,中等具有权重2,大重量为3,依此类推。
现在功能表就像
features
- feature_id
- feature_name
- feature_weight
为 product_feature_associations
创建单独的表格product_feature_associations
- product_id_fk
- feature_id_fk
您还可以在产品表中添加新列 product_ranking ,以避免在每次将新功能与任何产品相关联时,在产品列表提取期间进行批量计算,通过计算相关权重来更新此 product_ranking 字段。它会节省您的大量时间,但您需要跟踪 product_feature_associations 表格中的所有操作,就像您必须跟踪 product_feature_associations 表格中的添加,修改和删除操作一样并相应地更新 product_ranking 。