私は Web プログラミングが初めてで、専門家のアドバイスが必要です。Web サイト プロジェクトの 1 つに SQL データベースを使用しています。私のウェブサイトには、好き嫌いボタン付きのトピックのリストが表示されます。ログインしたユーザーは、各トピックの「好き」または「嫌い」ボタンをクリックできます。トピックごとに好き嫌いの数を数えることができます。したがって、ユーザーが特定のトピックをクリックすると、その特定のトピックの好き嫌いの数が表示されますが、私が達成しようとしているのは、誰かが特定のユーザープロファイルをクリックすると、ユーザーが好きまたは嫌いなすべてのトピックを表示する必要があることです. たとえば、Facebook でユーザー プロファイルをクリックすると、その特定のユーザーのすべてのコメントまたはいいね! が表示されます。これを実装してデータをクエリするためのデータ構造を知りたいのですが、よろしくお願いします。
3 に答える
トピックのテーブルとユーザーのテーブルがある場合は、両方にリンクするいいねのテーブルを追加します。このようなもの:
User
----------
ID (int, PK)
Name (string)
etc...
Topic
----------
ID (int, PK)
Title (string)
etc...
Like
----------
ID (int, PK)
UserID (int, FK to User.ID)
TopicID (int, FK to Topic.ID)
IsLike (boolean)
etc...
したがって、ユーザーが何かを「気に入った」ときはいつでも、そのテーブル設定IsLike
にレコードを追加しますtrue
。彼らが何かを「嫌う」場合は、そのテーブル設定IsLike
にレコードを追加しますfalse
。用語/名前/タイプ/などを変更できます。しかし、一般的な考え方は同じです。「いいね」は、User
と の間のリンク レコードになりTopic
ます。
したがって、トピックを表示するときは、そのトピックに関連付けられているリンク テーブルからレコードの数を選択するだけです。ユーザーを表示するときは、そのユーザーに関連付けられているリンク テーブルからレコードを選択します。
これは、使用できる単純なスキーマです。isLike はブール値で、好きな場合は true、嫌いな場合は false です。
トピックごとに好き嫌いの合計をクエリするには
Select Count(*), Topic,isLike FROM LikesDislikes GROUP BY Topic,isLike
ユーザーが高く評価したすべてのトピック
SELECT topic FROM likesdislikes WHERE userName = 'user' AND isLike = true;
などなど。
次の 3 つの SQL テーブルを使用できます。
トピック 評価 ユーザー
次に、Ratings テーブルを介して Users テーブルを Topics テーブルにリンクし、クエリを実行できます。
select * from Topics where RatingsUserID = UsersUserID
(疑似コード)