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