2013-06-28 140 views
0

我有一張表,裏面包含了大學網站的通知。我希望它保存最多1,000條通知。我使用id字段(它是自動增量)來獲取10條最新的通知(通過計算表示當前最近id的總條目,然後以向後10個方向遍歷),然後是下10條,等等。通過覆蓋現有數據管理MySQL表中的數據

現在當通知達到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

此問題尚不清楚。 –

+1

@InsaneCoder考慮在表中添加時間戳記和按時間戳排序的提取記錄 – alwaysLearn

+0

整個問題。如果您發佈一些數據和所需結果的圖像以及您的試用查詢,這將會非常有用。 –

回答

0

你會用你的插入查詢後刪除查詢。這樣你就不需要拉另一個查詢來查看上一次更新的記錄。

insert into table notices...; 
delete from notices where id not in (select top 1000 id from notices); 

如果你想保持相同的1000個IDS出於某種原因,那麼你可以切換自動遞增掉在桌子上,那麼你就必須拉兩個不同的查詢:

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;