プロが教える店舗&オフィスのセキュリティ対策術

現在プログラミングの勉強で、会員制の投稿サイトを作っております。
そこでデータベースを設計しているのですが、いいね!機能の実装方法がわかっていません。
(Facebookのいいねボタンとほぼ同様の機能ですが、それとは違うものです。)

仕様としては、

・気になる投稿に「いいね」を付けられる
・「いいね」を押すと、「いいね」カウントを増やす
・同じボタンで取り消すことができ、「いいね」カウントが減る
・内容は他のユーザにも反映する
・ユーザが「いいね」を押した投稿の一覧を見られる

こんなところです。Facebookのいいねと同じ仕様と思って頂いて構いません。

投稿データに「like_count」みたいなフィールドで増減すれば良いと思ったのですが、
いいねを付けたユーザーとの結びつけや、Ajaxでの処理の仕方が見当もつきません。

どうかお知恵をお貸しいただけると助かります。

A 回答 (3件)

とりあえず、FBのいいねボタンの仕様は知らないけど、ぱっと思いつくのは以下の様な感じ。



必要なテーブルが三個。

ユーザーテーブルと記事テーブルと、いいねカウントテーブル。

いいねカウントテーブルは ユーザーIDと記事IDだけのシンプルなテーブル。

ユーザーが その記事を開いた時点で このテーブルを参照し、「いいね」ボタンにするか「キャンセル」ボタンにするか決める。
Ajaxでやるなら その都度だけど。

んで、記事に対して いいねが押された時に このテーブルに追加。キャンセルだったら 当該レコードを削除。
その流れでカウントを集計して、記事テーブルの方にもカウント数を反映。

こんな感じかなと思います。

多分、言ってることは agunuzさんと一緒。
    • good
    • 7
この回答へのお礼

すみません、気付いておりませんでした。

申し少し勉強して、詳細に実施したいと思います。

ありがとうございます。

お礼日時:2013/05/31 10:03

>>Ajaxでの処理の仕方



は実装方法でしょうけど

>>いいねを付けたユーザーとの結びつけ

も不明であれば、機能自体がわかってないのでは?

どういうものを作らないと行けないのか?どうしたいのか?をまずはっきりさせてはいかがでしょうか?

この回答への補足

説明不足申し訳ありません。

機能は書いた通りです。

ユーザーとの結びつけというのは、
私が最初に思いついた打開策が、
menberとpostのテーブルを作り、postのフィールドにlike_countを作ることでした。

しかしそれでは
likeの数は増えても、どのユーザーがlikeしたかがそのpostテーブルでは管理出来ないと気付きました。

なので、結果的に「不明」と、そういう意味でした。

分かりづらくて申し訳ありませんでした。

補足日時:2013/05/29 15:46
    • good
    • 3
この回答へのお礼

ご回答ありがとうございます。
再度勉強し、挑戦したいと思います。

お礼日時:2013/05/31 10:05

ボタンを押したユーザIDと対象の投稿のIDでレコードを作成する必要があります。

一度ボタンを押したら2回押されないようにしたり、押したものを取り消すためです。ユーザIDと投稿IDでレコードを検索します(両方をキーにして、押された日時をデータとして持ってもいいでしょう)。

(例)
「いいね」を押す → レコードがない(まだ押されていない) → レコード作成し、投稿データのいいねカウントを+1する という流れになります。もしすでに押されていたら「そもそもいいねボタンを有効にしない」「押されても処理をしない」ということになります。

キャンセルのときは、「キャンセル」を押す → レコードがある(いいねが押されている) → レコード削除し、投稿データのいいねカウントを-1する となります。当然まだ押されていなかったら「そもそもキャンセルボタンを表示しない」「押されても処理をしない」です。

なお、最初からAjaxで作らずに普通にPOSTして処理することをまずは考えてください。それが完成してからAjax化しても遅くはありません。それこそ某いいねボタンのようにボタン部分だけインラインフレームというのもアリですし(苦笑

この回答への補足

ご回答ありがとうございます。

しかし、申し訳ありません。
わたしの今の知識では正直理解出来ませんでした。

お時間あるときで結構ですのね、より詳細に書いていただける非常に助かります。

大変恐縮とは思いますが、宜しくお願い申し上げます。

補足日時:2013/05/29 11:40
    • good
    • 8
この回答へのお礼

ご回答ありがとうございます。
再度勉強し、挑戦したいと思います。

お礼日時:2013/05/31 10:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!