Mysql SQL趋势数据
我正在尝试为我的主页创建一个趋势帖子数据库调用 我认为最好的方法是制作两个整数表 我面临的问题是对这些结果进行排序 这是我的表格的样子,我跟踪最近10个趋势帖子Mysql SQL趋势数据,mysql,trending,Mysql,Trending,我正在尝试为我的主页创建一个趋势帖子数据库调用 我认为最好的方法是制作两个整数表 我面临的问题是对这些结果进行排序 这是我的表格的样子,我跟踪最近10个趋势帖子 name trending clicks post1 10 5 post2 9 15 post3 8 12 post4
name trending clicks
post1 10 5
post2 9 15
post3 8 12
post4 7 10
post5 6 8
post6 5 8
post7 4 22
post8 3 18
post9 2 8
post10 1 8
趋势位置每4小时更新一次,点击重置为0
根据这些数据,我需要按照这个顺序来拉帖子
name trending clicks
post6 5 22
post8 3 18
post2 9 15
post3 8 12
post4 7 10
post5 6 8
post9 2 8
post10 1 8
post1 10 5
下面是另一个例子:
name trending clicks
post1 10 0
post5 6 9
post2 9 0
post3 8 0
post4 7 0
post6 5 0
post7 4 0
post10 1 3
post8 3 0
post9 2 0
我需要根据点击量对这些结果进行排序,前提是点击量高于趋势位置
示例:如果Post8 get的点击次数多于position 4,它将占据其位置并保持趋势的顺序,但使用点击也会对数据进行排序
原始帖子将保持其位置,直到趋势帖子的点击次数超过取代它的位置
我试图解决的问题是,当我重置趋势数据时。我每4小时重置一次数据,但希望保持每个趋势帖子上的位置和权重
我解释得够清楚了吗?有人能帮我吗?为什么这对你不起作用
SELECT name, trending, clicks
FROM YourTable
ORDER BY clicks DESC
但如果你想保持以前的趋势,那么你需要添加一个权重列
SELECT name, trending, clicks, weight
FROM YourTable
ORDER BY ((clicks + weight) /2) DESC
不是每4小时重置一次趋势,而是计算最后4小时的点击次数。您必须记录每次单击的数据时间
SELECT name, count(clicks) as clicks
FROM YourTable
WHERE datetime > DATEADD(h,-4,GETDATE())
GROUP BY name
ORDER BY count(clicks) DESC
看起来你想给我按点击排序。如果没有,你能提供一个不是这样的例子。我已经用另一个格式化的例子更新了原始帖子。你能添加更多的标签吗?这是sql server、mysql、oracle等吗?点击+权重的好主意。我正在尝试这个!!!我无法使用时间戳。当我这样做的时候,其中一些帖子永远不会移动位置。有时在1和2之间会有数百次点击。我希望通过经常重置帖子,可以给其他帖子一个登顶的机会。另一种方法是使用公式,根据点击的时间为每次点击分配权重。比如ClickWeight=1/number of秒,那么你的趋势就是SUMClickWeight。这里真正的工作是找到一个合适的权重函数。我做过一次实时交通功能。在过去的5分钟里,每辆车都有相同的重量,但之后是指数衰减。这样,最新的数据总是有更多的权重,但如果没有数据,旧的数据也会增加结果。是的,胡安。我正在努力使新数据能够与旧数据竞争。您的示例“按位置从测试顺序中选择*”+单击/2描述非常有效!我不知道我可以这样分类。非常感谢!!!!这对你来说很好,但你必须再次小心,因为这是一个简单的公式。如果前4小时一个帖子有很多趋势,那么需要几次重置才能从顶部下降。这就是为什么我建议使用衰减函数。