0

我正在尝试为我的主页创建一个 Trending Posts 数据库调用。

我想到的最好方法是制作 2 个整数表。

我遇到的问题是对这些结果进行排序。

这是我的表格的样子,我跟踪最近 10 个热门帖子。

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

只有当它们高于趋势位置时,我才需要根据点击对这些结果进行排序。

示例:如果帖子#8 获得的点击次数比位置#4 多,它将占据它的位置并保持趋势的顺序,但使用点击量也对数据进行排序。

原始帖子将保持其位置,直到热门帖子获得的点击次数超过其位置。

我试图解决的问题是当我重置趋势数据时。我每 4 小时重置一次数据,但希望保留每个趋势帖子的位置和权重。


我是否解释得足够好,有人可以帮助我吗?

4

1 回答 1

2

为什么这对你不起作用?

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
于 2015-09-30T16:08:27.440 回答