- ベストアンサー
フォロー機能を実装する方法とは?
- phpでsnsのようなフォロー機能を作りましたが、一度フォローした人は再度フォローできないようにしたいです。正しい方法を教えてください。
- ツイッターのフォロー機能はajaxを使用しているのでしょうか?ページ移動せずにフォローの変更ができる仕組みについて教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
そもそも、やりたいのは、そういう「機能」を持たせたいのだから、 SELECTってのは、違和感がそうとうあります。 該当カラムを、Uniqueにするだけで、おわるのではないかと。 なので、例えば自分自身が、user_idとして、フォローする相手がfollow_idだとしたら、 UniqueIndexに、user_id + follow_idでインデックス化すれば、 1度目のインサートで、まともにエラーが出ます。 なぜなら「ユニーク」なので、同じ組み合わせは1度しか 許していないわけなので。 後は、エラーハンドリングで2度目のエラーを 「すでに登録しています」と表示する流れを ページ遷移なしの、プロトコルとして、 WSなりXHRで送り返せばいいだけです。 それで、元々の質問に答えますと、 SELECT * FROM friend WHERE follow='admin' (select * from friend where follower='sub' limit 1) 単純に書式間違いです。サブクエリの回答が入る場所がないです。 括弧を展開すると SELECT * FROM friend WHERE follow='admin' ここにselect * が展開されたら、エラーになるのは当然です。 1件でもあれば?をやりたいなら count(*または主) でlimitはいりません。 それに対して、!= 0 つまり、0件以外なら しかし、そんなことをしたら、遅くなるだけです。 friendテーブルの構造がかかれていないので、判断が難しいのですが。 可能な限り検索系を使わない事がMySQLを使う上で大事な事ですよ 検索した結果を最初から持っておくように設計しないと、 MySQLって遅くて使い物にならないですから。 ついでに、今回みたいな、文字と比較もしない! あくまでIDを持ったものとインデックスとの比較 すれば、見た目SELECTを使ってもやる前から答えが 入っているので、超高速になりますよ。 (MySQLって一度使った検索をバックグラウンドで 次来た時の為に事前に答えを求めてる特性を利用する) ------------------------------------------------------------------ 変なやり方を一つ教えますと、 JavaScriptで画面に出ないIFRAMEを1つ作成 その中で、フォローの結果などに通信する スクリプトを作成。 それを親側のJavaScriptに書き込めば AJAXなしでも、非同期通信(っぽく)できますよ。 なぜなら、別IFRAMEなので、元々今いる 場所と別の場所で通信してるので。 サンプルを貼っておきますね。 JSでインナーフレームを作り通信させる。 https://hakuhin.jp/js/iframe.html
お礼
なるほど、色々参考になりました。 ありがとうございます。