現在プログラミングの勉強で、会員制の投稿サイトを作っております。
そこでデータベースを設計しているのですが、いいね!機能の実装方法がわかっていません。
(Facebookのいいねボタンとほぼ同様の機能ですが、それとは違うものです。)
仕様としては、
・気になる投稿に「いいね」を付けられる
・「いいね」を押すと、「いいね」カウントを増やす
・同じボタンで取り消すことができ、「いいね」カウントが減る
・内容は他のユーザにも反映する
・ユーザが「いいね」を押した投稿の一覧を見られる
こんなところです。Facebookのいいねと同じ仕様と思って頂いて構いません。
投稿データに「like_count」みたいなフィールドで増減すれば良いと思ったのですが、
いいねを付けたユーザーとの結びつけや、Ajaxでの処理の仕方が見当もつきません。
どうかお知恵をお貸しいただけると助かります。
No.1
- 回答日時:
ボタンを押したユーザIDと対象の投稿のIDでレコードを作成する必要があります。
一度ボタンを押したら2回押されないようにしたり、押したものを取り消すためです。ユーザIDと投稿IDでレコードを検索します(両方をキーにして、押された日時をデータとして持ってもいいでしょう)。(例)
「いいね」を押す → レコードがない(まだ押されていない) → レコード作成し、投稿データのいいねカウントを+1する という流れになります。もしすでに押されていたら「そもそもいいねボタンを有効にしない」「押されても処理をしない」ということになります。
キャンセルのときは、「キャンセル」を押す → レコードがある(いいねが押されている) → レコード削除し、投稿データのいいねカウントを-1する となります。当然まだ押されていなかったら「そもそもキャンセルボタンを表示しない」「押されても処理をしない」です。
なお、最初からAjaxで作らずに普通にPOSTして処理することをまずは考えてください。それが完成してからAjax化しても遅くはありません。それこそ某いいねボタンのようにボタン部分だけインラインフレームというのもアリですし(苦笑
この回答への補足
ご回答ありがとうございます。
しかし、申し訳ありません。
わたしの今の知識では正直理解出来ませんでした。
お時間あるときで結構ですのね、より詳細に書いていただける非常に助かります。
大変恐縮とは思いますが、宜しくお願い申し上げます。
No.2
- 回答日時:
>>Ajaxでの処理の仕方
は実装方法でしょうけど
>>いいねを付けたユーザーとの結びつけ
も不明であれば、機能自体がわかってないのでは?
どういうものを作らないと行けないのか?どうしたいのか?をまずはっきりさせてはいかがでしょうか?
この回答への補足
説明不足申し訳ありません。
機能は書いた通りです。
ユーザーとの結びつけというのは、
私が最初に思いついた打開策が、
menberとpostのテーブルを作り、postのフィールドにlike_countを作ることでした。
しかしそれでは
likeの数は増えても、どのユーザーがlikeしたかがそのpostテーブルでは管理出来ないと気付きました。
なので、結果的に「不明」と、そういう意味でした。
分かりづらくて申し訳ありませんでした。
No.3ベストアンサー
- 回答日時:
とりあえず、FBのいいねボタンの仕様は知らないけど、ぱっと思いつくのは以下の様な感じ。
必要なテーブルが三個。
ユーザーテーブルと記事テーブルと、いいねカウントテーブル。
いいねカウントテーブルは ユーザーIDと記事IDだけのシンプルなテーブル。
ユーザーが その記事を開いた時点で このテーブルを参照し、「いいね」ボタンにするか「キャンセル」ボタンにするか決める。
Ajaxでやるなら その都度だけど。
んで、記事に対して いいねが押された時に このテーブルに追加。キャンセルだったら 当該レコードを削除。
その流れでカウントを集計して、記事テーブルの方にもカウント数を反映。
こんな感じかなと思います。
多分、言ってることは agunuzさんと一緒。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Facebook Facebook 上でいいねボタンを押されることが鬱陶しく、そもそもボタンを押せないようにする設定は 1 2022/05/19 10:46
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
MySQLでデータベースにデータin...
-
PHPでPostgreSQLのテーブルを表...
-
変数にNULLを代入したい
-
OracleからAccessへのインポート
-
csvをDBへ読み込んだら、NULLが...
-
Yomi-search(PHP)を設置する...
-
バインドするデータを切替えしたい
-
ランダム文字列をDBにINSERT
-
クエリObjectをforeachで回す時...
-
外部結合で参照列が複数あるSQL
-
SQL CASE 文について
-
実行時エラー3131 FROM 句の構...
-
エクセルVBAについて
-
VBAをつかってクエリの情報を抽...
-
php データ削除
-
Pro*Cの構文エラー
-
円マークが付加されて保存され...
-
DBで検索結果に該当するデータ...
-
テキストボックスに入れた内容...
-
テーブルに入っているデータと...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
MySQLでデータベースにデータin...
-
変数にNULLを代入したい
-
phpにて出欠登録管理を作成して...
-
phpでテーブルを作る際変数によ...
-
csvをDBへ読み込んだら、NULLが...
-
SQLで返り値が空とでる
-
ヒアドキュメントでSQLを書く事...
-
php sqlite count 列数取得
-
OracleからAccessへのインポート
-
変数を組み入れたい
-
日またぎの計算
-
Accessへ日付をINSERT
-
任意の値の取得
-
クエリObjectをforeachで回す時...
-
PHPでいいね機能を作りたいので...
-
会員番号等に利用するダブらな...
-
PHP PDOを利用してカラムの削除...
-
SQL CASE 文について
-
phpを使用し、カテゴリー別に表...
-
トランザクション処理
おすすめ情報