我有一张表,其中包含大学网站的通知。我希望它最多可以容纳1,000条通知。我使用id字段(自动增量)来获取10个最近的通知(通过计算总条目数)表示当前最近的id,然后向后遍历10),然后是10,依此类推。
现在当通知达到1000限制时,通知应该通过覆盖现有数据开始从id 1上传。
现在的问题是如何修改sql
查询以识别最近的通知?因为假设我在表格填满后上传了17条通知,那么通知1到17是最近的通知,17是最近的通知在它旁边,即表中最近的18个。
或者是否有针对此类案例或任何最佳方法的任何教程或内容?
这是我的表结构 -
+-----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| title | varchar(160) | NO | | NULL | |
| body | mediumtext | NO | | NULL | |
| posted_by | varchar(30) | NO | | NULL | |
| semester | int(2) | NO | | NULL | |
| branch | varchar(30) | NO | | NULL | |
| posted_on | date | NO | | NULL | |
+-----------+--------------+------+-----+---------+----------------+
答案 0 :(得分:0)
您可以在插入查询后使用删除查询。这样,您就不需要再查询另一个查询来查看上次更新的记录。
insert into table notices...;
delete from notices where id not in (select top 1000 id from notices);
如果你想出于某种原因保持相同的1000个ID,那么你可以在表格中关闭自动增量,然后你必须拉出两个不同的查询:
select id,min(posted_on) from notices;
update notices set .... where id=$id;
真的因为MySQL设计用于处理数百万行,所以实际上你根本不需要这样做。您可以提取限制为1000的查询。
select * from notices limit 1000 order by posted_on DESC;