-4

[編集] 価値がないので削除しました。

4

4 に答える 4

1

正確なフィールド タイプは、使用しているデータベースによって多少異なりますが、一般的な手法は次のとおりです。

一意の ID を持つ users テーブルが必要です。

CREATE TABLE users (
    user_id       INTEGER      PRIMARY KEY,
    email         VARCHAR(50)  NULL,
    password      VARCHAR(32)  NULL
);

ニュース項目のテーブル:

CREATE TABLE articles (
    article_id    INTEGER      PRIMARY KEY,
    title         VARCHAR(50)  NULL,
    pubdate       DATETIMESTAMP,
    body          blob or whatever your database supports
);

そして最後に、どのユーザーがどの記事を読んだかを示す表:

CREATE TABLE users_articles (
    article_id    INTEGER,
    user_id       INTEGER,
    read_date     DATETIMESTAMP
);

使用するクエリと、データベースがそれらのクエリを最適化するために選択する方法に応じて、users_articlesテーブルはおそらく によってインデックス化されているはずです。article_id

ここで、user_id 999 がまだ読んでいない過去 7 日間のすべての記事を取得するには、クエリは次のようになります。

SELECT a.title, a.pubdate, a.body
FROM articles a
WHERE a.pubdate > date_sub(NOW(), INTERVAL "7 days")
AND NOT EXISTS (
    SELECT * 
    FROM users_articles ua
    WHERE ua.article_id = a.article_id
        AND ua.user_id = 999
)

もちろん、このクエリの他の定式化も可能です。また、間隔構文はデータベースごとに異なります。しかし、それはそれの要点です。

ユーザーが記事を読むたびに、user_id と article_id および現在のタイムスタンプを使用して users_articles テーブルを挿入/更新できます。副作用として、ユーザーが最近読んだ記事に関する情報も得られます。

于 2012-11-19T21:58:24.133 に答える
0

記事とユーザーの関係を保存できる新しいテーブルを作成することをお勧めします。テーブルは次のようになります。

ニュース ID | ユーザー ID | ip | 日にち ...

于 2012-11-19T21:48:16.483 に答える
0

users テーブルができました。そしてニューステーブルがあります。

user_has_read テーブルのようなものが必要です...

id
time
user_id
news_id

そうすれば、ユーザーが最初に何かを表示したときに、このテーブルにエントリを追加して、ニュース項目に関連付けることができます。次に、このテーブルで user_id を検索して、以前にここに来たことがあるかどうかを確認します。

また、ナビゲーションを容易にするために、最近読んだ 10 件の記事へのリンクを含む「最近閲覧した記事」セクションを作成することもできます。

于 2012-11-19T21:48:21.183 に答える
-1

何かが読み取られたかどうかを判断するブール値フラグを使用できます。ユーザーが読みたいものに到達したら、データベースに移動してそのフラグを true に設定し、そのレコードが特定のユーザーによって既に表示されていることを示します。

于 2012-11-19T21:40:35.290 に答える