Mysql PHP - 如何计算每天记录的个人加权分数

时间:2015-09-11 06:22:18

标签: php mysql

我在mysql数据库中有4个列的表,如hashtag_tid,user_id,activity_date和daily_score。

| hashtag_tid | user_id | activity_date | daily_score |
|        1260 |    2488 |    1441823400 |           1 |
|        1280 |    2488 |    1441823400 |           1 |
|        1229 |    5042 |    1441823400 |          23 |
|        1237 |    5042 |    1441823400 |          23 |
|        1260 |    5042 |    1441823400 |          42 |
|        1280 |    5042 |    1441823400 |          67 |
|        1802 |    5042 |    1441823400 |          23 |
|        1852 |    5042 |    1441823400 |          23 |
|        1260 |    2488 |    1441477800 |           1 |
|        1280 |    2488 |    1441477800 |           1 |
|        1229 |    5042 |    1441477800 |          23 |
|        1237 |    5042 |    1441477800 |          23 |
|        1260 |    5042 |    1441477800 |          42 |
|        1280 |    5042 |    1441477800 |          67 |
|        1802 |    5042 |    1441477800 |          23 |
|        1852 |    5042 |    1441477800 |          23 |

在上表中,对于hashtag_tid和user_id的组合,我需要对每天的daily_score应用一些权重。

每天的重量会有所不同,例如,对于今天的日期,daily_score应为daily_score * 1,对于昨天daily_score * 0.8,每天都会有所不同。

请帮我用MYSQL和PHP解决这个问题。

谢谢

1 个答案:

答案 0 :(得分:0)

如果您将有一个固定的过去天数来计算加权分数,那么以下可能是一种可能的解决方案。

SELECT `hashtag_tid`, `user_id`, 
  CASE 
    WHEN DATE_FORMAT(FROM_UNIXTIME(`activity_date`), '%Y-%m-%d') = CURDATE() THEN sum(`daily_score`)*1 
    WHEN DATE_FORMAT(FROM_UNIXTIME(`activity_date`), '%Y-%m-%d') = subdate(CURDATE(), 1) THEN sum(`daily_score`)*3 
    ELSE 0 END AS weighted_score 
FROM `tabel` 
Group By `hashtag_tid`, `user_id`, `activity_date`

这仅计算过去2天。