- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ランダム文字列をDBにINSERT)
ランダム文字列をDBにINSERTする方法は?
このQ&Aのポイント
- LAMPでWEBシステムを作成しており、ランダム文字列をDBにINSERTする方法について教えてください。
- 重複しないランダムな文字列をDBにINSERTする方法についてアドバイスをお願いします。
- MyIsamを使用し、PHPで作成したランダム文字列をDBにINSERTする方法について教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
予め、ランダムデータ用テーブルを1000万データ分作っておいて、 (まぁナンでしたら余裕をもって1億データくらいつくっておいてもよいかも) 新たにAUTO INCREMENTなどで振られたIDをもとに そのテーブルからランダムデータを渡してあげればよいのでは? ループでトライをする方式は場合によってはオーバーヘッドが 致命的になる場合もありますので。 メインテーブルにAUTO INCREMENT用テーブルが仕様上作成できないなら ランダムデータ用テーブルの方にフラグフィールドをつくっておき データを吐き出した時点でフラグをたてておけば、フラグのたってない データを渡すというやり方も考えられます。 まぁランダム用テーブルをつくるにあたっては、ループでトライアンド エラーでやることになりますが、データを作成するたびにトライするよりは ずいぶんすっきりすると思います
その他の回答 (1)
- hola1973
- ベストアンサー率45% (5/11)
回答No.1
私なら、ユニーク文字列を $id = md5 (uniqid (rand())); として、32桁で返します。 実装が簡単ですよ。
質問者
お礼
ご回答ありがとうございます。 ご提示頂いた $id = md5 (uniqid (rand())); としますと、完全に重複することはないのでしょうか? 可能性がわずかでもある場合は何かしらの処理が必要かと思われますので。 また、一応条件に、文字列は10桁(バイト数)とありますので、 できましたらこれに沿って頂けると助かります。
お礼
ご回答ありがとうございます。 ご提示頂いた実際の流れは、メインテーブルにINSERTする際にランダム文字列を取得する処理を考えた場合、 以下の流れでよろしいでしょうか? [DB部] ランダム文字列を格納するテーブルRAND_TBL(rand_seq_id int AUTO_INCREMET primary key, rand_id varchar(10) unique key)を作成、 必要分のデータををあらかじめ挿入。 メインテーブルMAIN_TBL(seq_id int AUTO_INCREMENT primary key, ....)作成 [処理部] メインテーブルへデータを挿入後、 "SELECT rand_id FROM RAND_TBL WHERE seq_id = ".mysql_insert_id();で取得 また、ランダム文字列をキーにMAIN_TBLからデータを取得する際に少しめんどくさそうなので、 できればメインテーブルにもランダム文字列を入れたいのですが、その後UPDATEしかないのでしょうか? PHPというより、Mysql分野に近くなってきましたが、何卒よろしくお願いします。
補足
Mysqlの分野のほうが近いような気がしますので、一旦締め切ります。 改めまして、再度Mysql板のほうで質問させて頂きます。 ありがとうございました。