2017-02-10 60 views
0

我想創建20行表格數據來存儲最近查看的頁面。表格行不應超過20行。FIFO類型最近瀏覽的網頁

例如,前20行的頁標題與標題將被存儲在該表中。當用戶查看第21頁時,則第一帖子ID和帖子標題將被刪除(即,首先查看的帖子)並插入(即,最後查看的帖子)在同一表格中。

我的表格式:

-------------------------------| 
ID  |  Post Title 
-------------------------------| 
1  |  Post Title 1 
2  |  Post Title 2 
3  |  Post Title 3 
... 
20  |  Post Title 20 
-------------------------------| 

如果有人請告訴我如何做,與優化QRY。

+0

你期待什麼樣的優化? – WeAreRight

+0

添加一個時間戳字段,您可以在其中存儲所查看的時間** now()**,然後您可以通過此字段訂購 –

+0

首先我刪除第一個添加的行。第二我插入最後查看的頁面ID。 如果網站獲得巨大流量,它將會出現問題。每分鐘此網站將獲得來自用戶的300個請求。我不感興趣在此表中存儲更多的查詢。 我想,這個查詢將運行而不會中斷,即使獲得高流量。 –

回答

1

你有兩列ID和標題。讓我們考慮一下,id的值將會超過20個。在任何時候,這個表格都會包含最多20行(根據您的需要)。

Understand following terms: 
min(id)   // will give minimum value in column id 
max(id)   // will give maximum value in column id 
count(id)   // counts total number of rows of your table 
new_id    // id of row which will be inserted next 

算法:

if(count(id)<20) // table have less than 20 rows so only insert 
     new_id = max(id)+1 
     insert the row with id as 'new_id' and page title 
else  // table have more than 20 rows so delete and then insert 
     delete row with id = min(id) 
     new_id = max(id)+1 
     insert the row with id as 'new_id' and page title 

什麼上述方案的建議是,如果你有不到20行的繼續插入,因爲空間還是存在的插入。但是,當您看到行數大於或等於20時,請首先刪除具有最小id的行,然後通過添加一個最大id列插入新行。

+0

已查看過的拳頭將首先被刪除,並且最後被查看後將被添加。即時通訊使用此表最近由用戶查看帖子。而這個網站每分鐘可以獲得150到300個用戶。如果我將所有數據存儲在該表中,它將變得巨大.. –

+0

我認爲你沒有得到我的邏輯,將更清晰地更新我的答案。 – WeAreRight

0

你可以做到以下幾點:在表中的行

LOCK TABLES mytable; 

INSERT INTO mytable (title) VALUES ('newtitle'); 

DELETE t FROM mytable t WHERE t.id IN (SELECT t2.id FROM (SELECT * FROM mytable) t2 ORDER BY t2.id DESC LIMIT 20,999999999); --Delete from 20 to "end" 

UNLOCK TABLES; 
0
  1. 首先,你需要在表中添加一列像創建日期
  2. 插入新記錄到該表中,首先檢查總數
  3. 如果行count == 20,則編寫一個查詢以刪除一條舊記錄。使用CREATED_DATE找出來...
  4. 如果行數< 20,那麼你可以直接插入記錄......沒有前檢查需要

上述步驟只能在一個查詢管理,如果你擅長寫作查詢

0

當用戶查看網頁:

$query = mysqli_query("SELECT COUNT(ID) From your-table",$conn); 
$result = mysqli_fetch_array($query); 
$total = $row[0]; 

if($total<20){ 
    //INSERT NEW ROW 
    $query = "INSERT INTO your-table() values(...,...)"; 
    //etc ... 
} else{ 
    // DELETE THE FIRST ROW 
    $query = "DELETE FROM your-table ORDER BY ID ASC LIMIT 1"; 
    // Then insert new row, etc... 
} 
+0

感謝您的代碼。當網站獲得更多流量時,此代碼是否會遇到問題? –