我有一个为我举办的比赛管理的表格,目前它有 4 列。
ID
Name
Tag
Rating
实际上,我希望尽可能长时间地跟踪标签的更改(及其更改的日期),以便为我的用户提供他们在比赛中的表现的折线图。
我尝试四处寻找一种方法,但以我有限的知识,我能找到的大多数方法是仅保存最后一次更改的方法,或者在进行更改时保存整个表的方法。就我而言,更改是针对单个用户(行)的,因此需要单独跟踪他们。
任何帮助将不胜感激。
编辑:
样本
id | name | tag | rating
-------------------------
1 | Khar | 5 | 800
2 | SantaCruz | 3 | 850
3 | Sion | 2 | 900
4 | VT | 1 | 758
5 | newFort | 4 | 535
6 | Bandra | 6 | 483
7 | Worli | 10 | 888
8 | Sanpada | 11 | 999
9 | Joe | 9 | 779
10 | Sally | 15 | 888
11 | Elphiston | 17 | 525
12 | Currey Road | 31 | 879
该标签实际上是我想要长期跟踪的排名。
当谈到想要的结果时,我不确定什么是可能的。实际上,我希望能够为每个人创建一个折线图(y 轴:标签,x 轴:日期),因此我认为另一个跟踪所有更改及其日期的表格是理想的。
最佳答案
您可以将计算出的标签值存储在单独的表ttbl
中(您永远不会更改任何值,而是始终将它们插入
那里!):
tid | uid | tag | changed
------------------------------------------
1 | 1 | 5 | '2017-09-24T15:34:23'
2 | 1 | 8 | '2017-09-24T15:36:23'
3 | 2 | 3 | '2017-09-24T15:38:23'
4 | 3 | 2 | '2017-09-24T15:40:23'
5 | 4 | 1 | '2017-09-24T16:34:23'
6 | 5 | 4 | '2017-09-24T16:44:23'
7 | 1 | 5 | '2017-09-24T18:14:23'
8 | 6 | 6 | '2017-09-24T18:24:23'
9 | 1 | 9 | '2017-09-24T18:34:23'
10 | 7 | 10 | '2017-09-24T18:44:23'
11 | 1 | 5 | '2017-09-25T15:31:23'
12 | 8 | 11 | '2017-09-25T15:32:23'
13 | 9 | 9 | '2017-09-25T15:33:23'
14 | 10 | 15 | '2017-09-25T15:34:23'
15 | 11 | 17 | '2017-09-25T15:35:23'
16 | 12 | 31 | '2017-09-25T15:36:23'
请注意,uid=1 的标记值会随着时间的推移从 5 变为 8、5、9,然后再次变回 5。
现在,通过特殊选择,您可以找出特定截止时间点的最新值,如下所示:
SELECT t.* FROM ttbl t
INNER JOIN (SELECT uid i, max(changed) dt
FROM ttbl WHERE changed<'20170925'
GROUP BY uid) u ON i=uid AND dt=changed;
这里的日期值'20170925'
代表截止时间。请随意将其与当前评级值或其他内容一起加入到您的表格中。
您可以在这里找到一个小演示:http://rextester.com/GZNL52987
关于php - 跟踪 mysql 的长期变化——用于形成折线图等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46389398/