2008年2月15日

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

少しSQLの基礎を勉強されると良いと思います。

ミヤカ様のスクリプトに合わせてテーブルを作るとしたら
> dateとbidを組み合わせた一つのユニークキーを用意したという前提でSQL文を作っています。
ということですので、

datebid varchar(10)
UNIQUE KEY `datebid` (`datebid`)


といったようなカラムが必要になるのではないでしょうか。


> UNIQUE KEY `bid` (`bid`),
> UNIQUE KEY `date` (`date`)

の部分だけ見ても実現したい機能と矛盾していますね。
これでは同じ日付のレコードは1つしか持てないので、
複数サイトのレコードを持てなくなってしまいます。

--
T.Inoue


08/02/15 に 萩原 <namioh@xxxxx> さんは書きました:
> ミヤカ様
>
> ありがとうございます。
>
> ご指示いただいたスクリプトを試してみました。
> しかし、INSERTとUPDATEともにうまく処理されませんでした。
>
> 自分でもON DUPLICATE KEY について調べてみましたが、
> 原因が特定できません。
>
> 何か基本的な事が間違っているのでしょうか?
>
> 今までのスクリプトをストップできないので、
> counter2というテスト用テーブルを作成して試しています。
>
>
>
> //カウント
> if(!$res[0]){ //なかったらインサート
>
> $sql = "insert into counter set bid = '$_GET[bid]',date = '$m',$_GET[type] =
> '1',ac = '1'";
> mysql_query($sql);
> echo $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);
> echo $sql;
>
> }
>
> ここまでは正常に処理されています
>
> //カウント(ここからご指示いただいたスクリプトテストです)
> $type = $_GET[type];
> $bid = $_GET[bid];
>
> $sql = <<< EOSQL
> INSERT INTO counter2
> (datebid,date,bid,$type)
> VALUES
> ($m$bid,$m,$bid,1)
> ON DUPLICATE KEY UPDATE
> {$type}={$type}+1;
> EOSQL;
> mysql_query($sql);
>
>
> --
> -- テーブルの構造 `counter2`
> --
>
> CREATE TABLE `counter2` (
> `bid` int(10) NOT NULL,
> `ac` int(11) NOT NULL DEFAULT '0',
> `pc` int(11) NOT NULL DEFAULT '0',
> `mb` int(11) NOT NULL DEFAULT '0',
> `date` int(11) NOT NULL,
> UNIQUE KEY `bid` (`bid`),
> UNIQUE KEY `date` (`date`)
> ) ENGINE=MyISAM DEFAULT CHARSET=ujis;
>
>
> ※以下のタグでカウンターを読み込んでいます
>
> <img src='http://******.***/count.php?bid=1&type=pc' width="1" height="1">
>
> お忙しいところお手数お掛けいたします。
>
>
> 萩原
>
_______________________________________________
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月15日 17:21
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/69758
トラックバック
コメント
コメントする




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