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