2008年2月14日

[PHP-users 33279] Re:MySql で二重書き込みを防ぐには?

さわい様

申し遅れましたが萩原といいます。
回答ありがとうございます。

> dateと bid で uniqに なるように テーブルの設定を変更したら
> 2つめの データは 作られずにエラーになるんじゃね?

テーブルの設定で uniq になるようにとはどう行うのでしょうか?
phpmyadmin でDBを管理しています。
uniqなるよう設定すると重複レコードが作られずエラーになるという事でしょうか?

知識不足ですみませんが、ご教授お願いします。


----- Original Message -----
From: "SAWAI-Shooskay" <teto@xxxxx>
To: <php-users@xxxxx>
Sent: Thursday, February 14, 2008 3:37 PM
Subject: [PHP-users 33272] Re: MySql で二重書き込みを防ぐには?


> さわいです。
>
> mysqlの話だろうと おもわないでもないが・・・
> dateと bid で uniqに なるように テーブルの設定を変更したら
> 2つめの データは 作られずにエラーになるんじゃね?
>
>
>> MySqlを利用したアクセスカウンターを作成しています。
>> アクセス数の多いサイト用なので1アクセス1レコードではなく、
>> 日付け毎に1日の合計数がレコードにカウントされていく仕組みです。
>>
>> 流れとしては、
>>
>> アクセスがあった時点で本日のレコードがあるかチェック
>> ↓
>> レコードが無かったら本日(20080214)を新規でインサート or すでに本日のレコードがあったら本日に1カウント
> update
>>
>> という簡単な流れです。
>>
>> 今回問題なのは、レコードが無かった場合(本日最初のアクセス)が、数件同時アクセスだった場合に
>> 同じレコードが複数追加されています。
>>
>> このような仕組みを作る場合、MySqlでのlockはどのように行うのでしょうか?
>>
>> 詳しい方ご教授お願いします。
>>
>>
>> ■実際のカウント用スクリプトです
>>
>> <?
>>
>> //DB接続
>>
>> $host = "******";
>> //ユーザー
>> $us = "******";
>> //パスワード
>> $pas = "******";
>> //データベース
>> $db = "*******";
>>
>> $con = mysql_connect($host,$us,$pas);
>> if(!$con){echo "接続失敗";}
>> mysql_select_db($db);
>>
>> //今日を取得
>> $m = date("Ymd");
>>
>> //DBから今日のレコード有無をチェック
>> $sql = "SELECT count(*) FROM counter ";
>> $sql .= "where date = '$m' && bid = '$_GET[bid]'";
>> // ※複数のサイト連動のカウンターなのでサイトの識別を bid で分けています。
>>
>>
>> $reslut = mysql_query($sql);
>> $res = mysql_fetch_array($reslut);
>>
>> //カウント
>> if(!$res[0]){ //なかったら新規レコード追加
>>
>> $sql = "insert into counter set bid = '$_GET[bid]',date =
>> '$m',$_GET[type] =
>> '1',ac = '1'";
>> mysql_query($sql);
>>
>> }else if($res[0]){ //あったらカウント追加
>>
>> $sql = "update counter set $_GET[type] = $_GET[type]+1,ac = ac+1 where
>> date
>> = '$m' && bid = '$_GET[bid]'";
>>
>> mysql_query($sql);
>>
>> }
>>
>> ?>
>>
>> _______________________________________________
>> PHP-users mailing list PHP-users@xxxxx
>> http://ml.php.gr.jp/mailman/listinfo/php-users
>> PHP初心者のためのページ - 質問する前にはこちらをお読みください
>> http://oldwww.php.gr.jp/php/novice.php3
>>
> _______________________________________________
> PHP-users mailing list PHP-users@xxxxx
> http://ml.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://oldwww.php.gr.jp/php/novice.php3
>

_______________________________________________
PHP-users mailing list PHP-users@xxxxx
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3

投稿者 xml-rpc : 2008年2月14日 17:19
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/69751
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。