지금 내 시스템에서 거대한 실시간 문제가 있습니다. 구독을 등록 할 수 있다고 상상해보십시오. 최대 참가자가 3 명이라고 가정 해 보겠습니다. 3 명이되면 구독을 모두 종료해야합니다! 이것은 내 코드의 일부입니다 :내 마지막 구독으로 구독이 종료되지 않습니다.
function subscription_data($subid) // activated by ajax
{
$sql = 'SELECT subEnrolled, subStatus FROM subscription WHERE subID=:subid';
$stmt = $db->prepare($sql);
$stmt->bindparam("subid", $subid);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
$subEnrolled = $row['subEnrolled'];
$subParticipants = '3';
// is this subscription already closed ???
if (!($row['subStatus'] =='1')) // if '1' not run anymore
{
if($subEnrolled+1 == $subParticipants)
{
$status1 = '1'; // close subscription for the NEXT fire
$sql = 'UPDATE subscription SET subStatus=:substatus WHERE subID=:subid';
$stmt = $db->prepare($sql);
$stmt->bindparam("subid", $subid);
$stmt->bindparam("substatus",$status1);
$stmt->execute();
}
//
// DO SOMETHING MORE
//
// Add to one enrollment
$add1enroll = '1';
$sql = 'UPDATE subscription SET subEnrolled=subEnrolled+:subenrolled WHERE subID=:subid';
$stmt = $db->prepare($sql);
$stmt->bindparam("subenrolled", $add1enroll);
$stmt->bindparam("subid", $subid);
$stmt->execute();
}
}
내 문제는 내가 예를 들어보다 더 전에 예고를 닫고 싶습니다. 3 명이 등록합니다. 그러나 여러 계정 (4)을 사용하여 기능을 실행하기 위해 AJAX 버튼을 빨리 누르면 3에서 4 개의 등록을 얻을 수 있습니다. 위의 if($subEnrolled+1 == $subParticipants)
과 함께이 문제를 피하려고했는데 - 마지막으로 등록한 사람의 경우 신청. 작동하지 않습니다.
당신이 내 변수를 이해하기를 바랍니다. 가능한 한 논리로 만들려고 노력했습니다. 위의 코드는 transaction()
함수 안에 있으며 일반적으로 InnoDB 테이블을 사용합니다. 그러나 이것을 변경하면 여전히 동일한 문제가 있습니다.
얼마나 많은 구독이 있는지 추적하고 계십니까? – Terminus
에'// DO SOMETHING' 내가'UPDATE subscription' 테이블을 추가하고 함수가 실행될 때마다 1 개의 등록을 추가합니다. 함수를 시작할 때이 번호 (등록 번호)를 추출하여'$ subEnrolled '변수에 넣습니다. 위의 내용은 단지 설명을위한 것입니다 –
구독을 종료하더라도 등록을 추가하는 것 같습니다. 아마도 문제가 생길 수 있습니다. – Terminus