1

YouTube のようなサイトは、ユーザーが動画を「いいね」したときにそれをどのように記憶しており、再びその動画が気に入らないようにしているのではないかと考えています。同様に、Reddit のようなサイトが賛成票と反対票を記憶し、ユーザーが既に賛成票を投じたコンテンツに賛成票を投じないようにする方法。

コンテンツの ID がユーザーの ID とその応答とともに格納されるデータベース テーブルと同じくらい単純ですか? それはとてつもなく巨大なテーブルになると思います。もっとトリッキーなことが起こっていますか?

4

3 に答える 3

9

このサイトでは、「いいね」や「賛成」をクリックする前にログインする必要があります。DB 内のコンテンツ ドキュメントには、受信したいいねの数を格納するフィールドがあります。いいねボタンがレンダリングされる前に、サイトは DB 内のログインしているユーザーのレコードをチェックして、彼がすでにそれを気に入っているかどうかを確認します。したがって、「いいね」または「いいね」オプションが表示されます。

Stackoverflow でここにチェックを入れると、自分の質問または回答に「賛成」をクリックすると、自分の投稿に賛成できないというメッセージが表示されます。「賛成票」をクリックすると、ユーザーIDと質問IDなどのその他の情報とともにajaxリクエストがサーバーに送信され、サーバーコードは賛成票が許可されているかどうかを確認します。つまり、ユーザーIDが同じであってはなりません。投稿者のIDとして。

于 2012-01-23T07:23:11.107 に答える
2

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

データベース テーブル:

1.) 投稿ごとに一意の ID を持つ投稿と、それを作成したユーザーの user_id (コンテンツ、タグなどの他の情報と共に) を含むもの。

2.) 少なくとも次のフィールドを持つ likes と呼ばれるテーブル、ID、post_id (好きまたは嫌いな投稿テーブルの投稿に対応)、user_id (好き/嫌いを行ったユーザー テーブルのユーザーに対応)、ステータス (0 または 1、0 は投稿が好き、1 は投稿が嫌い)。

ユーザーが投稿を気に入った場合、user_id と post_id を使用して行を likes テーブルに挿入し、ステータスを 0 に設定します (または 0 がデフォルトであるため空のままにします)。ユーザーが投稿を気に入らない場合は、同じことを行いますが、ステータスを 1 に設定します。

そうすれば、投稿ページで、投稿を高く評価または低く評価したすべてのユーザーの数を取得できます。ユーザーのプロフィール ページでは、ユーザーが好きまたは嫌いなすべての投稿を取得できます。好き嫌いの多い投稿をランク付けすることもできます。または、好き嫌いの多いコンテンツを投稿した特定のユーザーをランク付けすることもできます。

データベースに既にレコードがある場合、ユーザーが投稿を好き/嫌いにならないようにしてください。(基本的に、post_id が現在の投稿と等しく、user_id がログインしているユーザーと等しい like テーブルのレコード数を確認するだけです)

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

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

于 2012-01-23T19:16:38.293 に答える
-4

はい、とても簡単です。ただし、通常、サイトは IP アドレスを使用するため、ユーザーが異なるアカウントで 2 回投票することはありません。

編集:申し訳ありませんが、私は間違っていました。Quentin 氏によると、複数のユーザーが同じ IP を持ち、システムを悪用しようとしていない可能性があるため、Web サイトは IP に基づいていません。小規模なサイト (少なくとも私が使用したサイトのいくつか) では、IP に基づく投票システムを実装しています。

于 2012-01-23T07:06:43.143 に答える