单表操作的实战问题
来源:15-2 最佳实践

慕标4541063
2020-07-19
老师,这是一张每日打卡的记录表,用户每天点一次打卡就会往这张表添加一条记录.假设当前用户的user_id = 1,如何查询该用户最长连续打了多少天的卡?
(我现在的做法是把该用户的所有打卡记录全部取出来放在代码层面循环遍历依据日期是否相邻以及是否打卡来计算连续打卡的最大天数.但是假如某些用户打卡了几千天,并且有很多用户同时查询,服务器的压力太过繁重,有什么更好的优化方法吗?)
写回答
3回答
-
其实获取连续打开多少天,应该不麻烦。根据 user_id 搜索出该用户所有的打开记录,逆序排序,得到一个列表。
然后遍历这个列表,遇到 is_record 打卡了,就累加打卡次数。遇到 is_record 未打开,就清零打卡次数。
这样你会得到很多阶段性的打卡次数,得到一个数组,而数组中的最大值就是你要的结果。
以上逻辑,查询一遍数据库,遍历一遍查询结果即可,时间复杂度 O(n)
022020-07-22 -
慕标4541063
提问者
2020-07-21
双越老师,我不太懂时间复杂度.但可以给你看下我是怎么实现得到最长连续打卡天数的方法.下面的这个函数存在的最大问题就是如果list这个数组很大比如上千那就要遍历好多次.一个用户查询就遍历这么多次,要是并发起来服务器压力肯定很大.双越老师你只需要说说你的想法,给个思路我就行了,感谢!
012020-07-22 -
双越
2020-07-19
我先问一下,你觉得你的算法,时间复杂度是多少呢?
你先回复,然后我再说说我的想法。
00
相似问题
如何实现评论列表以及对评论回复的展示功能
回答 2
关于数据库迁移的问题
回答 2