2017-02-10 30 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

感谢您的代码。当网站获得更多流量时,此代码是否会遇到问题? –