人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

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

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

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

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

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

●質問者: aiueo
●カテゴリ:インターネット ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● a-kuma3
●200ポイント ベストアンサー

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

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

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


aiueoさんのコメント
ありがとうございます。この場合 Duplicate entryとなって他のユーザーのログをつけることができないのですが。

a-kuma3さんのコメント
他のユーザというのは、member_id が違うのではないのですか? >> 例えばAさんが天気スレッドを見に行った際、このtableに1度だけ書き込みをしたいです。 << thread_id : 天気スレッドのID、member_id : AさんのID のつもりです。 足跡テーブルは、こんなつもりで回答しました。 >|sql| CREATE TABLE footprint (thread_id int NOT NULL, member_id int NOT NULL, PRIMARY KEY(thread_id, member_id)); ||<

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

2 ● oil999
●0ポイント

PHP側で制御します。

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

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

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

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ