您好我正在處理一種抽獎系統,它將100萬個隨機數字分成x個票數, 100萬個隨機數到10,000張門票。MySQL + PHP中的行間分隔數字
每張票都是一個數據庫中的一行,然後我們有另一張票的票數,在這張票數中我需要給他們與票證ID相關的每張票證提供100個數字。
所以在目前,這是我的代碼:
//Amount of the 1 million tickets divided to the tickets
$numbersPerTickets = $_POST['numbersPerTicket'];
//The total cost of the property
$propertyPrice = $_POST['propertyPrice'];
//The total amount of tickets
$totalTickets = NUMBER_CIELING/$numbersPerTickets;
//The ticket price
$ticketPrice = $propertyPrice/$totalTickets;
//Generate array with random numbers up to 999,999
$randomTicketNumbers = createTicketNumbers();
//Creation loop counter
$ticketCreationCount = 1;
//Loop and create each ticket
while($ticketCreationCount <= $totalTickets)
{
//Create a padded ticket number
$ticketNumber = str_pad($ticketCreationCount, 6, 0, STR_PAD_LEFT);
$query = '
INSERT INTO tickets(
propertyID,
ticketNumber,
price
)
VALUES(
"'.$propertyID.'",
"'.$ticketNumber.'",
"'.$ticketPrice.'"
)
';
$db->query($query);
//Get the ID of the inserted ticket to use to insert the ticket numbers
$ticketID = $db->insert_id;
$loopBreak = $numbersPerTickets;
$addedNumberCount = 1;
foreach($randomTicketNumbers as $key => $value)
{
$query = '
INSERT INTO ticketNumbers(
ticketID,
number
)
VALUES(
"'.$ticketID.'",
"'.$value.'"
)
';
$db->query($query);
unset($randomTicketNumbers[$key]);
if($addedNumberCount == $loopBreak){
break;
}else{
$addedNumberCount++;
}
}
$ticketCreationCount++;
}
但是這是行不通的它增加了門票適量,這在測試的情況下爲10,000,但隨後增加了太多的票號它最終超過了隨機票數組中的數百萬個數。隨機票數組只是一個簡單的1層數組,其中有100萬個數字隨機排序。
我不是一個PHP的傢伙,但你可以使用'for'而不是'while'來限制循環到10,000? – 2012-07-07 15:03:05
@ChrisGessler嗨,克里斯,第一個循環運行良好,限制了票數,這是第二個循環中的數字被添加到門票,這給出了意想不到的結果,我只是不明白爲什麼那裏太多的門票被添加... – 2012-07-07 15:04:51
我想我不明白,你說適量的門票,然後說太多門票...無論如何,我會擺脫while循環和foreach循環並用for循環替換。 – 2012-07-07 15:07:02