2011-12-22 9 views
-5

[好き| PHP/SQLを利用した最も魅力的で効率的な方法です。Like/Dislike機能のPHP/SQLロジック

私は現在、2つのテーブルを持っている:users & content

  • はどのようにして、ユーザの好き嫌いを保存する必要がありますか?
  • 特定のコンテンツアイテムの好き嫌いの数をどのように保存する必要がありますか?

私は可能な限り最良のロジックを探していますので、非効率なクエリでサイトを過負荷にしていません。

+0

をより具体的にしてください。通常、回答を格納するために単一のテーブルを使用するのが最適ですが、状況によって異なります。 –

+0

各オプションには長所と短所があります(ただし、好き嫌いテーブルは1つのテーブルに過ぎません)。それをテーブルに保持すると、COUNT節が不要になり、選択がはるかに迅速になります。しかし、一度に何かを好きにしようとする人が10人いると、アップデートによってロックの問題が発生します。別のテーブルを使用している場合、COUNTクエリは列を読み込むよりも少し遅くなりますが、新しいエントリを追加するときには* as * badではありません(ここではいくつか前提をしています)。そして、あなたは常にハイブリッド版をやることができます。 – Corbin

+0

これは実際には曖昧です。これはもっと大きなプログラム/プロジェクトに入っていますか、単に好き嫌いを集めるつもりですか? – Robert

答えて

1

サンプル表

posts 
---- 
id 
content 
user 


users 
---- 
id 
username 

user_likes 
---- 
id 
user 
post_id 
0

あなたは新しいテーブルuser_likesを作成すると、おそらくユーザーを維持するために外部キーによって一緒にリンクされたテーブルlikes_details「好き」と(日付、IP、または何か他のものなど)、このものについての情報、デシベルnormalizationに見ることができます。

0

データベース構造を正規化しておく必要があります。それはあなたを意味します

  • できるだけチョップの属性。たとえば、フィールド 「住所」を作成せず、「ストリート」「郵便番号」「ハウスナンバー」の3つのフィールドを作成します。
  • は、一貫した属性をまとめて表にします。例えば、テーブルpersonは、「person_id」、「height」、「weight」または「eye_color」のようなフィールドを含むことができますが、「address」のようなフィールドは含まれません。 「person_id」、「street」、「postcode」、「housenumber」のようなフィールドを含む「person_addresses」と呼ばれる第2のテーブルを作成します。

したがって、効率的な方法は2つのテーブルを作成することです。 field "user_id"と第2の "likes_dislikes"のフィールド "user_id"、 "likes"と "dislikes"の最初の "user"

は、データベースの正規化についての詳細を学ぶためにこのwikiエントリを見てみましょう: http://en.wikipedia.org/wiki/Database_normalization

関連する問題