0

使用 PHP 和 MySQL 我想使用 PARENT 和多子关系跟踪注册。如果超过 1 个用户尝试使用相同的父代码注册,则会出现问题。父母只会记入 1 个用户而不是 2 个。据我了解,解决方案是锁定记录。或者使用服务器时间和记录时间戳来确定上次更新。

#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; }

那么这个过程看起来有用吗?即使有超过 1 个孩子同时签名,这是否能确保每个孩子注册时始终正确记入家长?我不期望多并发注册,但它们可能偶尔发生,我必须确保正确记入 PARENT。

4

1 回答 1

0

我不明白你的 SQL 结构。

如果您将“信用”与具有相同父 ID 的新孩子的出现相关联,那么任何数量的用户都可以同时关联。

赶紧跑:

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

你就完成了。父母和孩子是否在不同的桌子上无关紧要。重要的是不能从父级引用到子级,即您唯一的引用是子行中父级的 id。这样您就不会在父级上出现并发问题。

当您需要知道给定父母有多少孩子时,只需计算他们:

从隶属关系中选择 COUNT(*),其中 id_p = id_of_parent;

我怀疑您现在正在父行中存储一个计数器。如果是这样,请不要:它看起来更简单,但并发问题使其不值得努力。

于 2012-09-06T14:41:54.060 回答