2012-01-23 11 views
1

YouTubeのようなサイトでは、ユーザーが動画を「好き」にして再び好きになることを忘れてしまったときを思い出します。同様に、Redditのようなサイトはアップフォートとダウンフォートをどのように記憶しており、ユーザーがすでにアップフォートしたコンテンツをアップウィートするのを防ぐ。YoutubeはどのようにLikesを覚えていますか?

ユーザーのIDとその応答とともにコンテンツのIDが格納されるデータベーステーブルと同じくらい簡単ですか?大規模なテーブルになるような気がする。何か難しいことはありますか?

+0

redditのソースコードが利用できます。それを使用してください... – plaes

+0

ええ私はそれを見てきましたが、私はかなり初心者ですので、少しは圧倒されました。しかし、それを通して掘り下げていくつもりです。 – John

答えて

1

私のページには、嫌いなシステムがあります。

データベーステーブル:

1)各ポストのためのユニークなIDとコンテンツ、タグなど)のような他の情報と一緒に(それを作成した人のUSER_IDとの投稿が含まれていますワン。

2.)好きなテーブルは、以下のフィールド、ID、post_id(好き嫌いのあるポストテーブルのポストに対応)、user_id(好き嫌いをしたusersテーブルのユーザに対応します/嫌い)、ステータス(0または1、0は投稿が好き、1は投稿が嫌いです)。

ユーザーが投稿を好きなときは、そのuser_idとpost_idを使用してlikesテーブルに行を挿入し、ステータスを0に設定します(または、デフォルトは0なので空白のままにします)。ユーザーが投稿を嫌いにしても、同じように設定しますが、ステータスを1に設定してください。

このように、投稿ページでは、投稿を好き嫌いのあるすべてのユーザーの数を取得できます。ユーザーのプロフィールページでは、ユーザーが好きなものや嫌いなものをすべて取得できます。また、好き嫌いが最も多い投稿の順位をつけることもできます。また、最も好き嫌いのあるコンテンツを投稿したユーザーを特定することもできます。

ユーザーが既にデータベースにレコードを持っている場合、投稿の好き嫌いを許可しないでください。 (基本的に、post_idが現在の投稿に等しいlikesテーブルのレコードの数をチェックし、user_idはログインしているユーザーと等しい)

投稿の投稿者のuser_idを取得するためのポストテーブルを参照してください。投稿者user_idがログインしているユーザーと同じ場合、またはユーザーが現在ログインしていない場合は、投票を許可しないでください。

これらのすべてを実行するためのクエリは単純です(単純にSELECT *またはSELECT user_id)。これが基本的な考えです。

-4

はい、それは簡単です。一般的に、サイトはIPアドレスを使用しているため、ユーザーは異なるアカウントで2回投票しません。

編集:申し訳ありませんが、私は間違っていました。 Quentinによると、複数のユーザーが同じIPを持ち、システムを悪用しようとしていない可能性があるため、WebサイトはIPを基にしていません。小規模なサイト(私が使っているもののうちの少なくとも一部)は、そうでなければコンテンツのランキングを操作する方が簡単なので、IPに基づいた投票システムを実装しました。

+3

一般的に、そのようなサイトはIPアドレスを使用しません。なぜなら、非常に多くのユーザーが他のユーザーとIPアドレスを共有するNATが非常に多いからです。 – Quentin

+0

さて、大丈夫、ありがとう。 – John

+0

@Quentin、申し訳ありませんが、私は一瞬で私の答えを削除します。私はそれを知らなかった。 – mowwwalker

9

「like」と「upvote」をクリックする前にログインする必要があります。 DB内のコンテンツ文書には、受信した好き嫌いの数を格納するフィールドがあります。同様のボタンがレンダリングされる前に、サイトはDB内のログインしているユーザーのレコードと照合して、彼が既にそれを好んでいたかどうかをチェックし、それに応じて「好き」または「違う」オプションが表示されます。

Stackoverflowでここをチェックすると、あなた自身の質問または回答で "upvote"をクリックすると、自分の投稿をアップアップすることができないというメッセージが表示されます。何が起こるかは "upvote"をクリックすると、AjaxリクエストがユーザーIDと質問IDなどの他の情報を持つサーバーに送信され、サーバーコードはupvoteを許可されているかどうかを確認します。つまり、ユーザーIDは同じであってはいけませんポストクリエイターのIDです。

関連する問題