0

ユーザーが好むトピックのテーブルを設定するにはどうすればよいですか? 私はトピックテーブルとユーザーテーブルを持っています (実際にはもっと単純化されていますが、ここでの投稿のために簡略化されています)。ユーザーが作成したトピックの数は増え続けています。ユーザーがページを気に入ってくれるようにするにはどうすればよいですか? トピックの ID をユーザー テーブルに入れるか、ユーザーの ID をトピック テーブルに入れるか、または新しいいいね! テーブルを作成しますか? 問題は、トピックの数が (潜在的に) 非常に多くなる可能性があることです。ユーザー ID とトピック ID の関係を可能にするシステムを作成するには、何を使用できますか?

4

4 に答える 4

3

あなたができることは、「多対多」のテーブル構造です

  • 一意の自動インクリメント ID - UINT (10) AUTO_INCREMENT
  • ユーザーIDを含むフィールド - UINT (10)(またはメインフィールドに一致するものuser_id)
  • 「いいね」されたトピック ID を含むフィールド UINT (10)(またはメイン フィールドに一致するものtopic_id)

user_idとフィールドの両方topic_idが一緒に一意である必要があります。つまり、ユーザーごとに特定の「いいね!」に対して 1 行しか存在できないということです。これにより、(データベース側で) ユーザーがトピックを 2 回以上いいね! することが許可されなくなります。

ユーザーが好きなトピックを取得すると、次のようになります-

SELECT * FROM user_likes` WHERE `user_id`=USER_ID

いいねごとにユーザーを取得すると、次のようになります-

SELECT * FROM user_likes WHEREtopic_id`=TOPIC_ID


他の人が回答で言っているように、また@trevorが以下のコメントで言っているように-

ユーザーが気に入ったトピックの取得をサポートするために、ユーザー ID にインデックスを追加することを忘れないでください。トピックの別のインデックスは、ユーザー クエリごとのトピックをサポートするためのものです。これらがないと、時間の経過とともにデータが追加されるにつれてクエリが遅くなります。

于 2012-07-28T20:56:44.763 に答える
0

別のいいねテーブルを作成します。これは別のエンティティであるため、いいねテーブルuserstopicsテーブルに
リンクし、likesテーブルの外部キーとしてuseridtopicsidを使用します。

このような構造を持つとよいでしょう。後で、好きな機能が必要ない場合は、他のテーブルに影響を与えずに削除することができます...

于 2012-07-28T21:02:27.890 に答える
0

「いいね」テーブルが必要になります。何かのようなもの:

CREATE TABLE `users_likes` (
    `user_id` INT(10) UNSIGNED NOT NULL,
    `topic_id` INT(10) UNSIGNED NOT NULL,
    PRIMARY KEY (`user_id`, `topic_id`),
    INDEX `topic_id` (`topic_id`)
) 
于 2012-07-28T20:57:55.497 に答える
0

これを行う 1 つの方法は、新しいテーブルUserLikedTopicsなどを作成することです。このテーブルには、2 つの列があり、1 つは を保持しUserId、もう 1 つは を保持しTopicIdます。ユーザーが「いいね」した新しいトピックごとに、UserId と TopicId を含む新しい行をテーブルに追加します。こうすることで、どのユーザーがどのトピックを気に入っているかを簡単に追跡できます。

特定のユーザーが好きなトピックを取得するには、UserLikedTopics をトピック テーブルに結合するだけで、特定のユーザーが好きなすべてのトピックのリストが得られます。逆に User テーブルに結合して、特定のトピックが好きなユーザーのリストを取得することもできます。

于 2012-07-28T20:56:59.810 に答える