FIFO类型最近查看的页面

时间:2017-02-10 07:12:18

标签: php mysql

我想创建20行表数据,以存储最近查看过的页面。表格行不应超过20行。

例如,带有标题的前20行页面ID将存储在该表中。当用户查看第21页时,第一个帖子ID和帖子标题将被删除(即首次查看帖子)并在同一个表格中插入(即最后查看的帖子)。

我的表格格式:

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

如果有人请告诉我如何通过优化qry来做到这一点。

4 个答案:

答案 0 :(得分:1)

你有两列id和title。让我们考虑一下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为column的新行。

答案 1 :(得分: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;

答案 2 :(得分:0)

  1. 首先,您需要在表格中添加一列,如创建日期
  2. 在向此表中插入新记录时,首先检查表中的总行数
  3. 如果行计数== 20,则编写查询以删除一条旧记录。使用created_date找出它......
  4. 如果行数是&lt; 20然后你可以直接插入记录......不需要预先检查
  5. 上述步骤只能在一个查询中进行管理,如果您擅长编写查询

答案 3 :(得分:0)

用户查看页面时

jsfiddle