在mysql中保存页面视图

时间:2013-06-13 21:38:52

标签: mysql

我在mysql数据库中有一个用户表,如下所示:

+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | int(11)      | NO   | PRI | NULL    | auto_increment |
| username    | varchar(255) | YES  |     | NULL    |                |
| password    | varchar(255) | YES  |     | NULL    |                |
| recent      | varchar(255) | YES  |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+

我需要保存用户查看的最后20个ID。我的第一直觉是使用字符串来保存以逗号分隔的列表,但这违反了规范化。我需要保存的只有20个ID,并且是特定用户查看它们。

我能想出的最好的,保持正常化,就像这样:

users
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | int(11)      | NO   | PRI | NULL    | auto_increment |
| username    | varchar(255) | YES  |     | NULL    |                |
| password    | varchar(255) | YES  |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+

users_pages
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | int(11)      | NO   | PRI | NULL    | auto_increment |
| users_id    | int(11)      | YES  | MUL | NULL    |                |
| pages_id    | int(11)      | YES  | MUL | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+

pages
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | int(11)      | NO   | PRI | NULL    | auto_increment |
| page01      | int(11)      | YES  |     | NULL    |                |
| page02      | int(11)      | YES  |     | NULL    |                |
| page03      | int(11)      | YES  |     | NULL    |                |
| page04      | int(11)      | YES  |     | NULL    |                |
| page05      | int(11)      | YES  |     | NULL    |                |
| page06      | int(11)      | YES  |     | NULL    |                |
| page07      | int(11)      | YES  |     | NULL    |                |
| page08      | int(11)      | YES  |     | NULL    |                |
| page09      | int(11)      | YES  |     | NULL    |                |
| page10      | int(11)      | YES  |     | NULL    |                |
| page11      | int(11)      | YES  |     | NULL    |                |
| page12      | int(11)      | YES  |     | NULL    |                |
| page13      | int(11)      | YES  |     | NULL    |                |
| page14      | int(11)      | YES  |     | NULL    |                |
| page15      | int(11)      | YES  |     | NULL    |                |
| page16      | int(11)      | YES  |     | NULL    |                |
| page17      | int(11)      | YES  |     | NULL    |                |
| page18      | int(11)      | YES  |     | NULL    |                |
| page19      | int(11)      | YES  |     | NULL    |                |
| page20      | int(11)      | YES  |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+

但我知道在列名中有数字并不理想。另外,我不知道如何更新第21页视图中的表格。它需要通过将第21页视图放在page20列中进行更新,而第20页变为第19页,第19页变为第18页等,直到第2页变为第1页,旧页面1被遗忘。

我认为CASCADE可能有用,但是尽管谷歌搜索我无法清楚地了解它的含义或使用方法。

如果它有所不同,我正在通过PHP访问MySQL。

如果有人能让我更好地了解如何处理这个问题,我真的很感激。

1 个答案:

答案 0 :(得分:0)

试试这个:

select page_id 
    from users_pages 
    where user_id = @user_id 
    order by id desc limit 20.

这应该有效,因为users_pages的id是auto_increment(和主键),除非你没有按照访问它们的相同顺序保存页面视图,否则后代排序就可以了。