0

次のように、mysql データベースに 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    |                |
| 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 列に配置して更新する必要があります。一方、page20 は page19 になり、page19 は page18 になり、page2 が page1 になり、古い page1 は忘れられます。

CASCADE と呼ばれるものが役立つかもしれないと頭に浮かびましたが、Google で検索しても、その意味や使用方法を明確に理解することはできません。

違いがある場合は、PHP を介して MySQL にアクセスしています。

誰かがこれを処理する方法についてより良いアイデアをくれれば、本当に感謝しています。

4

1 に答える 1

0

これを試して:

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

users_pages の id は auto_increment (および主キー) であるため、これは機能するはずです。ページ ビューを訪問した順序で保存しない限り、降順の並べ替えでうまくいきます。

于 2013-06-13T21:44:51.710 に答える