0

PHPとMySQLを使用して、PARENTとmulti-CHILDの関係を使用してサインアップを追跡したいと思います。複数のユーザーが同じ親コードを使用してサインアップしようとすると、問題が発生します。親には2人ではなく、1人のユーザーのみがクレジットされます。私が理解している解決策は、レコードをロックすることです。または、サーバー時間とレコードタイムスタンプを使用して、最終更新を決定します。

#THIS IS NOT PRODUCTION CODE, BUT JUST INTENDED TO DEFINE MY PROCESS
#PLEASE ADVISE AND MAKE ADJUSTMENTS AS YOU SEE FIT

$sqlget = SELCT * record of PARENT and WHERE id is of PARENT
$ts -> timestamp;
$st -> servertime;
$af -> aff_number;

今、親のタイムスタンプの最後のレコード更新を確認したいのですが、その更新が10秒以内に発生した場合は、$sqlgetを再実行したいと思います。

$ tsをINTに、$ stをINTに変換して、条件が失敗した場合にIFステートメントを実行して$sqlgetをループできるようにするにはどうすればよいですか。

if($ts <= $st by 10 seconds) { wait 10 seconds and rerun sqlget } 
else { get current $af (INT) and +1; UPDATE record; close connection; 
META-refresh to next page; }

では、このプロセスは機能しているように見えますか?これにより、複数の子が同時に署名した場合でも、子の登録ごとに親が常に適切にクレジットされるようになりますか?複数の同時登録は期待していませんが、場合によっては発生する可能性があるため、親が適切にクレジットされていることを確認する必要があります。

4

1 に答える 1

0

あなたのSQL構造がわかりません。

「クレジット」を同じ親IDを持つ新しい子の外観に関連付けると、任意の数のユーザーが同時にアフィリエイトできます。

とにかく走れ:

INSERT INTO affiliations ( id_p, ... ) VALUES ( id_of_parent, whatever_data );

これで完了です。親と子が別々のテーブルにいるかどうかは関係ありません。重要なことは、親から子への参照があってはならないということです。つまり、唯一の参照は子行の親のIDです。このようにして、親での同時実行の問題は発生しません。

特定の親が何人の子供を持っているかを知る必要がある場合は、単にそれらを数えます。

SELECT COUNT(*)FROMアフィリエーションWHERE id_p = id_of_parent;

現在、親行にカウンターを格納していると思われます。もしそうなら、そうしないでください:それはより単純に見えますが、並行性の問題はそれを努力する価値がないようにします。

于 2012-09-06T14:41:54.060 に答える