通过覆盖现有数据来管理MySQL表中的数据

时间:2013-06-28 05:41:55

标签: php mysql sql database

我有一张表,其中包含大学网站的通知。我希望它最多可以容纳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    |                |
+-----------+--------------+------+-----+---------+----------------+

1 个答案:

答案 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;