• 締切済み

桁数の長くないユニークな値の取得

Apache2 + PHP5 + MySQLという環境でWebアプリを開発しています。 そこでPHPで生成したランダムでユニークな値をデータベースに格納したいのですが、 その際、値の桁数を10文字程度に制限したいのでmd5などを使うと桁数が長くなりすぎてしまい使うことができません。 ただランダムな文字列を格納しておき、もしデータベースに同じデータがあればもう一度やり直すことなども考えましたが、データが多くなると重複の確立が高くなってしまい、あまり気が進みません。 この場合どのようにすれば解決できるのでしょうか。よろしくお願いします。

  • PHP
  • 回答数1
  • ありがとう数1

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>PHPで生成したランダムでユニークな値をデータベースに格納したいのですが なんのためにランダムな数字が必要なのでしょうか? データがユニークかどうかはプライマリキーなどで制御することに なるので、ユニークな値は必要ありません。 例えばselect right(md5(now()),10)などとしてもよいですが 単にランダムな値がでるだけで、完全なユニークになる保証はありません。 >ランダムな文字列を格納しておき、もしデータベースに同じデータが >あればもう一度やり直すことなども考えましたが、 この作業はどんなことがあっても必要でしょうね。 入力側でどんなに精度の高いランダムをもちいても、すでに出力 されているかどうかを判定することはできません。 完全をめざすのであれば、最初にランダム表を作っておいて、 そこからデータを得ることです。

puripuriman
質問者

お礼

返答が遅くなってしまい申し訳ありません。回答ありがとうございます。 やはりユニークな値を格納するには毎回チェックするしかなさそうですね。 参考になりました。ありがとうございました。

関連するQ&A

  • MySQLにてランダムにデータを取得

    PHP4+MySQL4を使用しています。 MySQLのデータベースから、ランダムにデータを取得することはできますでしょうか? データを取得してPHPで乱数を発生させて、データをランダムに表示するという事は出来たのですが、取得の際にランダムで、というのは出来るのでしょうか? 宜しくお願い致します。

  • MySQLのエラーの取得

    PHPでMySQLをやっています。 データベースにinsertする時に、primary keyで重複登録に 引っかかった登録の場合、 「Duplicate ~」とエラー(PHPでエラーが起ると強調された文字でエラーが 表示されると思うんですが、このエラーは普通の文字です) が出ますが、このエラーをPHP側で取得したい(変数に格納したい) のですが、やり方を教えてもらえないでしょうか?

    • ベストアンサー
    • MySQL
  • 「000-000」のような値を扱いたい時の型。

    例えば整数「123」などでしたら、int型を使って値を格納すればいいと思うのですが、例えば「123-999」などを扱いたい場合は、どんな型を使うべきでしょうか?やはり文字列型になってしまうでしょうか? 数字以外には「-(あるいは_)」しか使いません。 それらの値をデータベース(MySQL)に入れる予定です。 それらの値はデータベースのID(キー)に使います。 よろしくお願いします。

    • ベストアンサー
    • Java
  • PHPからInsertしたら文字化けしてしまいました。

    Apache2,PHP5,MySQL5を使用しています。 PHPからMysqlにデータを格納し、その後MySQLからデータを受け取りPHPで表示させると、PHPでは問題なく表示されていたのですが、MySQLでは文字化けしてしまいました。 送った内容は、「こんにちは。沢田です」と送りました。 PHPでは「こんにちは。沢田です。」となっていたのですが、MySQLには「??"??"???????????¢?" ??§??」となって格納されていました。 PHPではutf8でsjisにして設定しています。何がいけないのでしょうか。 よろしくお願いします。

  • MySQLからデータを取得すると日本語が「??」と表示される

    PHPとMySQLを使い、ブラウザでデータベースの読み書きをするプログラムを作っています。 ローカルで作成しているときは特に問題が無かったのですが、いざサーバマシンにアップしてみると問題が発生するようになりました。 【事象】 1.MySQLからデータを読み込みブラウザに表示すると、日本語のデータのみ「??」と表示される。 2.ブラウザからMySQLへデータの書き込みをしようとすると書き込みが出来ない。 【現時点での切り分け】 1.GETでデータを渡しており、受信した方で$_GET['hoge']を表示させると正常に表示される。ただし、データをMySQLに格納する際にエラーがでる。 2.英数字の読み書きは問題なし。 3.サーバマシンを直接操作し、コマンドプロンプトからデータを入力すると日本語でも正常に格納される。 【ローカルマシン】 Apache2.xx PHP 4.xx MySQL 5.xx 【サーバマシン】 Apache 2.2.0 PHP 5.1.2 MySQL 5.0 【設定等】 PHP、MySQLの両方とも文字コードをSJISに設定しています。 また、METAタグで「charset=Shift_JIS」と指定しています。 Apacheのhttpd.confファイルにおいてISO-8859-1をコメントアウトしましたが改善されませんでした。 mb_convert_encodingを使って文字コードを強制的に(?)SJISにして書き込もうとしてもダメでした。 読み込みも然りです。 色々と試してみましたが全然改善されず困ってます。 どなたかアドバイスをいただけましたらうれしいです。

    • ベストアンサー
    • PHP
  • 指定した件数を取得

    よろしくお願いします MySQL5を使用しています 現在、レコードに7件入っていて PHPから取り出すときに 10件取り出したいです。 重複していいので7件しかないデータを重複ありで10件をランダムで取得 というのはSQL文で可能なのでしょうか? それともPHPから制御するしかないのでしょうか? 以上よろしくお願いします

    • ベストアンサー
    • MySQL
  • mysqlに格納されている日付のデータから重複なしで年を取得する方法

    mysqlに格納されている日付のデータから重複なしで年を取得する方法 を検討しているのですが、どなたかご教授していただければと 思います。 下記のデータベースの場合 2007 2008 2009 2011 といった値を抽出したいと考えております。 どうぞよろしくお願いいたします。 mysql> select*LOGS; +-----+---------------------+------+ | UPDATE_DATE | ITEM_NO | +---------------------+------+ | 2007-07-05 14:35:35 | 1 | | 2007-07-05 14:42:20 | 5 | | 2008-07-06 00:01:20 | 12 | | 2009-07-06 13:38:16 | 13 | | 2009-07-06 13:47:45 | 13 | | 2011-07-06 13:54:10 | 2 | +---------------------+------+

    • ベストアンサー
    • MySQL
  • phpでMySQL内の重複文字カウント

    phpでMySQL内に格納されている文字データのうち、重複した文字データを 重複数順にランキング表示するプログラムを作成しようと思います。 例 MySQLデータが 昼 夜 昼 昼 夜 朝 であれば、 1、昼 2、夜 3、朝 とphpで表示 MySQLへのデータ登録は、普通にmysql_queryでSQL文を飛ばしてデータ挿入しています。 その際、MySQL内のデータと重複したらイベント(重複カウントを1増やすなど)を起こす方法、 もしくは、重複しているデータと、その重複数を取得できるようなphp関数、SQL文はないものでしょうか? データ数自体は100程度のものなので、全データをphpで配列に格納してから、 配列内を捜査でもよいのですが・・・ 初歩的かつ限定的な質問ですが、どうかご回答お願いします。

    • ベストアンサー
    • PHP
  • テーブル内の一意の値に関しまして

    現在、ブランド管理システムの構築に携わらせていただいております。 まだまだ、勉強中の身で気になることだらけです。 MySQL+PHPの組み合わせにて構築を行っております。 1.データベース内に管理番号という項目があり、その項目はデータの呼び出し、更新、他のテーブルとの紐付けに使われ、 この値を書き換えるということはされない項目です。(auto increment、primary keyが設定されております) 現在は、bigint(20)と設定されておりますが、扱える桁数を万が一超えるとなるととても怖いのですが、これ以上桁数を増やすことはできるのでしょうか。 2.1の項目をweb上にて呼び出しを行い、1のような使い方の場合(呼び出した値への加工を行わない)、整数型では扱える範囲(PHP_INT_MAX)を超えている場合になった場合は影響があるのでしょうか。 先輩に聞いてもそう決まっているという回答しか答えていただけません。 詳しい方、是非教えていただけませんでしょうか。

    • 締切済み
    • PHP
  • Mysql+PHP+Apache/サーバークライアント環境での

    Mysql+PHP+ApacheでWebからデータベースを扱う勉強をはじめました。この3つを1台のPCにインストールして、Webサーバーをローカルに立てて動作確認をしてきました。これをサーバー/クライアント環境で行う場合のことでお尋ねします。 ★行いたいこと Webサーバーにデータ(HTML、PHP、データベース)を保存しておいて、クライアントからそのデータを操作して、Webページの開発を行いたい。 質問(1) Webサーバーにインストールするのは、Mysql+PHP+Apache、クライアントにインストールするのは、Mysqlでよろしいのか。 質問(2)クライアントのMysqlを起動して、サーバーのMysqlのデータを扱うという考え方でよいのか 質問(3)クライアントのMysql内のデータとサーバーのMysqlのデータの関係はどのようになるのか。 とてもお恥ずかしいですが、宜しくお願いします。

専門家に質問してみよう