Sqlite之删除超过50条的数据

Sqlite之删除超过50条的数据,第1张

概述   在应用中,总要对用户的一些 *** 作进行记录,比如播放历史记录,搜索历史记录等,方便用户再次使用。但是这些记录又不能无限的存储,只需要记录最新的50条或者100条就可以了,所以要求应用每插入一条新数据之后,对超过50条的数据进行清理。     本文以搜索历史记录为例,主要介绍sqlite中limit ,offset关键字的使用,最后给出此复合语句的写法。 建表     搜索历史记录只需要记录搜索关

在应用中,总要对用户的一些 *** 作进行记录,比如播放历史记录,搜索历史记录等,方便用户再次使用。但是这些记录又不能无限的存储,只需要记录最新的50条或者100条就可以了,所以要求应用每插入一条新数据之后,对超过50条的数据进行清理。

本文以搜索历史记录为例,主要介绍sqlite中limit ,offset关键字的使用,最后给出此复合语句的写法。

建表

搜索历史记录只需要记录搜索关键词和搜索时间即可。所以我们需要这样的一张表:

表中只有两个字段(keyword,time):其中keyword是唯一的,不允许重复;时间默认为写入数据库的默认时间,我们可是使用sqlite数据的datetime(‘Now’)函数

好了,给出搜索历史记录(search_history)建表语句:

CREATE table [search_history] ([keyword] CHAR UNIQUE,[time] TIMESTAMP NOT NulL ON CONFliCT REPLACE DEFAulT (datetime(‘Now’)))


sqlite之limit ,offset关键词

limit 语法有两种写法s

1. 一个参数 : limit x

其中x是一个整数,表示返回x条目记录。

2.两个参数: limit x,y

其中x,y 都是整数,表示跳过x 条记录,返回 y 条记录,即liMIT <skip>,<count>

此外limit 还与offset关键词结合,语法是: limit x offset y

表示跳过 y 条记录,返回 x 条记录 ,即liMIT <count> OFFSET <skip>

乍一看 limit x,y 和limit x offset y 的语义很接近,千万不要搞混了。

复合SQL语句演练

由于我们的表中只有上图所示4条数据,为了演示方便,我们将最大数量定位2,超过2条以上的数据将被删除。

在这里我们选用offset关键词,一步步获得超过2以后的记录。

1:首先计算keyword的数量,确保数据库中的条目大于最大值2 ,这是重要的条件之一。条件不成立,不进行删除 *** 作。

select * from search_history where (select count(keyword) from search_history) >2


因为4>2,所以返回全部数据结果:

2:接下来,我们将按照时间(time字段)降序排列数据,筛选所有的关键词

select keyword from search_history order by time desc


返回结果:

3. 扩展第2步 , 在按照时间(time字段)降序,获得超过最大值2以上的所有关键词。也就是在第2步的基础,加入limit关键词

select keyword from search_history order by time desc limit (select count(keyword) from search_history) offset 2


返回结果:

现在我们已经将超过最大值2以上的时间较早的搜索关键词查询出来了,大功即将搞成。接下下将这些数据删除即可,当然不要忘了加入我们第1步的条件。

4. 结合第一步的条件,最终复合SQL语句就是:

delete from search_history where (select count(keyword) from search_history )> 2 and keyword in (select keyword from search_history order by time desc limit (select count(keyword) from search_history) offset 2 )

执行之后,可以看到超过最大值2的数据,也就是第3步中的数据都被删除了。重新查询之后的结果如下:

说明执行结果是正确的。

最后将最大值2改为50就可以了:

最终语句如下:

delete from search_history where (select count(keyword) from search_history )> 50 and keyword in (select keyword from search_history order by time desc limit (select count(keyword) from search_history) offset 50 )

原文链接:http://www.67tgb.com/?p=530

转载请注明出处:望月听涛

总结

以上是内存溢出为你收集整理的Sqlite之删除超过50条的数据全部内容,希望文章能够帮你解决Sqlite之删除超过50条的数据所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1181306.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存