[pgsql-jp: 29958] Re: 40万件有るデータから重複をさけて登録する

Satoshi Nagayasu snaga @ snaga.org
2003年 5月 18日 (日) 14:31:28 JST


永安です。

"k_matsui" <matsui @ tono-k.jp> wrote:
> >   1.) count を 0 にして INSERT
> >   2.) 1.)に失敗したら、count を 1 にして INSERT
> >   3.) 2.)に失敗したら、count を 2 にして INSERT
> >   4.) 3.)に失敗したら、4回目なのでエラー
> 
> 大変すばらしいと思うのですが、これですと一つ問題があります。
> 応募期間を3回に分けて、各期間ごとに1度づつ計3回の応募が
> 可能としたいので、これですと期間に関係なく3回までの応募と
> なってしまいます。

そしたら、count を periodとして、募集期間{0,1,2}の間は、
period を {0,1,2} に(プログラム内で)固定にすれば
いいのではないでしょうか?

ロジックとしては、

  1.) 募集期間 n においては、period を n にして INSERT
  2.) 1.)に失敗したら、(その期間内の)重複応募としてエラー

とすればいいと思います。

> 例えば、
> select count(email) from t-1 where email=$oubomail group by email
> とかで応募して来たメールアドレスがいくつあるか数えて、
> php側で一度目の応募の時はメールアドレスが0個の時、二度目の
> 応募は、1個以下、三度目は2個以下の時に応募OKみたいな感じ
> にしたらどうでしょうか?
> 
> なにぶん40万件というデータをあつかった事がないのですが、
> これでは処理的に無理はありませんでしょうか?

確たることは言えませんが、集約関数は使わない方が無難な気がします。
使わなくて済むなら。

-- 
NAGAYASU Satoshi <snaga @ snaga.org>




pgsql-jp メーリングリストの案内