我正在尝试创建一个过滤器来显示某些被认为是“趋势”的记录。因此,我们的想法是选择投票率高的记录,但不要按投票最多到最少投票的降序排列。这样用户就可以浏览并有机会查看所有链接,而不仅仅是顶部的链接。你建议什么是最好的方法?我不知道如何创建随机分类的趋势链接,但是当用户从一个页面到另一个页面时,它们不会重复。有什么建议么?如果有任何不清楚的地方请告诉我,谢谢!
3 回答
此响应假定您在每个投票的每行基础上跟踪子表中的投票,而不是仅对特定项目的计数器 +1。
确定您关心热门话题的时间范围。也许1小时会好?
然后运行查询以确定在过去一小时内哪个项目的投票数最高。按此计数排序,您将获得不断更新的最受好评的项目列表。
SELECT items.name, item_votes.item_count FROM items
INNER JOIN
(
SELECT item_id, COUNT(item_id) AS item_count
FROM item_votes
WHERE date >= dateAdd(hh, -1, getDate()) AND
## only count upvotes, not downvotes
item_vote > 0
group by item_id
) AS item_votes ON item_votes.item_id = items.item_id
ORDER BY item_votes.item_count DESC
您提到您不想在多个页面上重复项目,这意味着您无法根据请求获得随机排序。相反,您需要检索项目、订购它们并将它们保存在服务器范围或特定于会话的缓存中。
服务器范围的缓存需要每隔一段时间更新一次,您需要定义一个时间间隔。发生此更新时切换页面的用户将看到他们的项目被打乱。
只要用户浏览您的网站,特定于会话的缓存就会保留这些项目,这意味着如果您的用户从未离开,这些项目就会过时。再一次,您需要确定强制更新的时间间隔。
我在想你需要一个版本列表。你可以做服务器范围的缓存解决方案,并给它一个版本(日期,整数,任何东西)。您在浏览最新趋势时需要传递此版本,用户将继续查看相同的列表。单击趋势菜单链接会将它们发送到没有版本信息的浏览页面,这应该会从缓存中获取最新信息。只要用户正在浏览这些页面,您就可以保留它。
我无法进入sql语句,不是因为它们很难,而是我们不知道您的数据库结构。您是否在单独的表格中跟踪个人投票?它们只是聚合成一列吗?
也许创建一个新列来记录它有多少视图?然后每次有人查看它时更新它,并按查看次数最多的线程排序。