mysqlについて相談させていただきます。


mixiにある足あとのようなログ機能を作りたいと考えています。

掲示板のスレッドがあったとして、興味のあるスレッドに会員がアクセスした際に書き込み処理をしようとしております。

tableは単純にこの2カラムだけ用意して
thread_id member_id
書き込みをしたいのですが、重複しないようにしたいです。

例えばAさんが天気スレッドを見に行った際、このtableに1度だけ書き込みをしたいです。

この場合制御するのはmysql側か、php側か?制御の仕方はどのようにすればよいのでしょうか?

ご知見あるかた教えて頂けますと助かります。

どうぞよろしくお願いいたします

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2012/01/25 22:34:00
  • 終了:2012/01/26 14:57:19

ベストアンサー

id:a-kuma3 No.1

a-kuma3回答回数4585ベストアンサー獲得回数19252012/01/25 23:14:09

ポイント200pt

thread_id と member_id のふたつをプライマリキーにして、
とりあえず insert をしてみて、エラーになったら mysql_error() で、エラーコードを調べて、
キーの重複だったら、何もせずにスルーする。

http://dev.mysql.com/doc/refman/5.1/ja/error-messages-server.html
キー重複のエラーコードは、1022 と 1062 の二種類があるので、注意する必要があります。

後、余計な御世話かもしれませんが、書き込んだ日時をテーブルに持っておくと、便利なように思います。

他1件のコメントを見る
id:a-kuma3

他のユーザというのは、member_id が違うのではないのですか?

例えばAさんが天気スレッドを見に行った際、このtableに1度だけ書き込みをしたいです。

thread_id : 天気スレッドのID、member_id : AさんのID のつもりです。
足跡テーブルは、こんなつもりで回答しました。

CREATE TABLE footprint
  (thread_id int NOT NULL, member_id int NOT NULL, PRIMARY KEY(thread_id, member_id));
2012/01/26 10:59:43
id:kuso47

すみません、お返事したあとに複合ユニークキーの設定をしまして無事完了いたしました。ありがとうございました。

2012/01/26 14:56:39

その他の回答(1件)

id:a-kuma3 No.1

a-kuma3回答回数4585ベストアンサー獲得回数19252012/01/25 23:14:09ここでベストアンサー

ポイント200pt

thread_id と member_id のふたつをプライマリキーにして、
とりあえず insert をしてみて、エラーになったら mysql_error() で、エラーコードを調べて、
キーの重複だったら、何もせずにスルーする。

http://dev.mysql.com/doc/refman/5.1/ja/error-messages-server.html
キー重複のエラーコードは、1022 と 1062 の二種類があるので、注意する必要があります。

後、余計な御世話かもしれませんが、書き込んだ日時をテーブルに持っておくと、便利なように思います。

他1件のコメントを見る
id:a-kuma3

他のユーザというのは、member_id が違うのではないのですか?

例えばAさんが天気スレッドを見に行った際、このtableに1度だけ書き込みをしたいです。

thread_id : 天気スレッドのID、member_id : AさんのID のつもりです。
足跡テーブルは、こんなつもりで回答しました。

CREATE TABLE footprint
  (thread_id int NOT NULL, member_id int NOT NULL, PRIMARY KEY(thread_id, member_id));
2012/01/26 10:59:43
id:kuso47

すみません、お返事したあとに複合ユニークキーの設定をしまして無事完了いたしました。ありがとうございました。

2012/01/26 14:56:39
id:oil999 No.2

oil999回答回数1728ベストアンサー獲得回数3202012/01/26 13:36:14

PHP側で制御します。

テーブルに書き込む前に、

select * テーブル名 where thread_id=スレッドID and member_id=メンバーID;

にて検索し、ヒットしたらテーブルへのinsertは行いません。
ヒットしなかったらinsertします。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません