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


Mysql PHP - How to calculate individual weighted score for each day record

我在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解决这个问题。

谢谢

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

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`

如果您想将权重保留在表中以便将来可以轻松更改,则可能的解决方案:-

SELECT hashtag_tid, SUM(h.daily_score + w.weighting)
FROM hashtags h
INNER JOIN weighting w
ON DATEDIFF(CURDATE(), DATE(FROM_UNIXTIME(h.activity_date))) = w.days_diff
GROUP BY hashtag_tid

这是假设您有一个名为加权的表,其中有两列,一列是以前的天数,另一列是该天数的权重。

缺点是需要将时间戳转换为日期,然后在连接上获取日期差值,这可能不会很快。