0

我有一个包含大学网站通知的表。我希望它最多包含 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    |                |
+-----------+--------------+------+-----+---------+----------------+
4

1 回答 1

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;
于 2013-06-28T07:00:08.510 回答