每个用户的php限制视图

时间:2017-09-28 11:25:48

标签: php mysql sql

首先,我必须说这是我的第二个问题(首先是关闭因为我没有很好地解释我的问题)

我正在构建应该由我们的50-60名员工使用的数据库。在我们的基地,我们有很多客户(1row = 1customer)。想法是当员工打开页面时,它应该显示一个客户,但如果另一个员工打开同一页面它应该显示另一个客户(我想避免如果2个员工同时按下刷新按钮的情况,页面不会显示相同的客户。

我有这个PHP代码用于从基础中获取数据,但如果我同时推送刷新它将在2台PC上给我相同的结果。我怎么能避免那个

在表telesales_anc中,我有列' Lock_ID'和PHP用' 1'更新它页面打开时

是否有任何功能可以保持'连接到行或类似的东西?我尝试谷歌它,但我只找到一些计时器的解决方案(但我认为这是一个坏主意,仍然2 emlpoyes可以同时打开)

$MSISDN = "SELECT MSISDN FROM telesales_anc WHERE Lock_ID != 1 LIMIT 1";
$result = $mysqli->query($MSISDN);

while ( $row = $result->fetch_assoc() ) {
$IDcheck = "SELECT ID FROM telesales_anc WHERE '{$row['MSISDN']}' = MSISDN";
$result_IDcheck = $mysqli->query($IDcheck);

while ( $row = $result_IDcheck->fetch_assoc()) {
$lock_ID = "UPDATE telesales_anc SET Lock_ID = 1 where '{$row['ID']}' = ID";
$result_ID = $mysqli->query($lock_ID);

}}

1 个答案:

答案 0 :(得分:-1)

我在很短的时间内添加了一个usleep()等待其他用户锁定并在第二个sql AND Lock_ID!=1进行了一些小改动,所以如果其他用户锁定它你就不会拿到这个,请注意你需要一些循环用于重试以获取未锁定的一个

$MSISDN = "SELECT MSISDN FROM telesales_anc WHERE Lock_ID != 1 LIMIT 1";
$result = $mysqli->query($MSISDN);

usleep(rand(100000,300000)); // we are sleeping randomly between 0.1 - 0.3 seconds for waiting the other users lock
while ( $row = $result->fetch_assoc() ) {
    $IDcheck = "SELECT ID FROM telesales_anc WHERE '{$row['MSISDN']}' = MSISDN AND Lock_ID != 1";
    $result_IDcheck = $mysqli->query($IDcheck);

    while ( $row = $result_IDcheck->fetch_assoc()) {
        $lock_ID = "UPDATE telesales_anc SET Lock_ID = 1 where '{$row['ID']}' = ID";
        $result_ID = $mysqli->query($lock_ID);

}}