アプリ版:「スタンプのみでお礼する」機能のリリースについて

PHP4とmySQLで、以下のことがしたいのですが

・数字3文字の乱数を生成する
・DBに同じ値がないかチェックする
・同じ値が既にDBにあったときは乱数を生成するところからやり直す
・なければDBに書き込んで処理終了
※DBには オートインクリメントのID | 乱数 の2フィールドを使用
※乱数はintではなくvarcharとして書き込む

PHPにgoto命令がないので、スマートなやり方ご存知の方いらっしゃいましたら教えてください。
あと数字3文字の組み合わせなので、DBに値が1000個入っているとそれ以上書き込めないので処理の中止(exit)を行いたいのですが、どこで分岐したものか悩んでますので、併せてご指導いただければ幸いです。

$rand1 = (0,99); $rand2 = (0,99); $rand3 = (0,99);
$abc = $rand1.$rand2.$rand3.
$sql = //省略
$result = $sql;
if($abc == $result){
//重複アリ:この中の処理をどうするとスマートなのか、、、}
elseif{
//重複してないのでDBに書き込みます
}

A 回答 (1件)

>数字3文字の乱数を生成する


二桁の数字を三つ生成しているように見えるんですが、
それだと都合6桁になりませんか?

重複したときのリトライ云々は
do {
・数字3文字の乱数を生成する
・DBに同じ値がないかチェックする
} while (重複なし);
DBへの登録

で何か不都合が?

つーか三桁の組み合わせにしろ、六桁の組み合わせにしろ、
いちいち乱数で生成して確かめてなんてやるよりは
あらかじめ三桁なり六桁の数字を配列に生成しておいて、
それをシャッフルして順に取り出せばいいのではないでしょうか?

これなら生成した配列の終端まで行ったら登録数の上限に
達したということだから一緒にチェックできるでしょう。
    • good
    • 0
この回答へのお礼

doという便利な命令があるのを知りませんでした。
これで解決できそうです。ありがとうございます。

>二桁の数字を三つ生成しているように見えるんですが、
書き間違えていました。$rand1 = (0,9); の間違いです。

配列案は、いちどの処理を全て埋まるまで実行するわけでは
ないので、違う方法を考えてみます。
大変助かりました、ありがとうございました!!

お礼日時:2007/09/24 21:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!