2016-04-14 22 views
0

一意の注文番号を生成する方法。 私はデータベースを使って自動インクリメントしたくありません。私はこれを使用し、同時に2つの要求を得るとき は私が一意の注文番号を生成するが、自動インクリメントを使用したくない

$check_oid_from_cart_query = " 
    SELECT 
     MAX(CONVERT(orderid, UNSIGNED INTEGER)) AS orderid 
    FROM tbl_cart_hist 
    WHERE locationid = '$lid' 
    AND order_type <> '5'"; 
$check_oid_from_cart_result = dbQuery($check_oid_from_cart_query); 

以下のコードを使用しています、私は同じ順序番号を取得しています。この質問がで参照されているそのうちのいくつかは、様々な方法を使用して、ここで回答されている

+1

ここに2つの問題があります。1.それは_遅れている(スケールアップすると最終的に壊れる重要な部分になるかもしれない)2.ここで一意性を保証するものは?並行して処理される要求はどのように処理されますか? – arkascha

+0

自動インクリメントID(奇妙です)を避けたい場合は、INSERT中にいくつかのハッシュ関数やアルゴリズムを使用することをお勧めします。さもなければ、あなたはconcurentの挿入があるときdupsを保証することができません。 – mitkosoft

答えて

1

[http://phpgoogle.blogspot.co.za/2007/08/four-ways-to-generate-unique-id-by-php.html][1] が、その質問は3日前に頼まれた見て、私は多分、次は役立つかもしれない、あなたはシンプルなものを探していると仮定?

オプション1:マイクロ秒で表される使用時間。 microtime()は、現在のUnixタイムスタンプをマイクロ秒で返します。この関数は、gettimeofday()システムコールをサポートするオペレーティングシステムでのみ使用できます。

$microseconds = round(microtime(true)); 
$orderid = $microseconds; 
echo $orderid; 

オプション2:私はちょうどそれがまだ100%の生産準備ができているのであればわからないこの技術を思い付きました。 &ランダム1桁の数秒で、現在の時刻、年の最後の2桁、分単位で現在の時刻、年の日を追加してみてください(あなたは増やすことができ、毎日顧客ベースに応じて、(mt_rand(1100)))

//mt_rand for random digit 
$random = (mt_rand(1,9)); 
// date('z') gives the day of year i.e today is day 106 of the year 2017 
$date = date('zyis'); 
$date .= $random; 
$orderid = $date; 
echo($orderid); 

出力のようになります1051738225

良いアイデアを見つけたら、私に教えてください。

関連する問題