2012-07-07 64 views
0

您好我正在處理一種抽獎系統,它將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萬個數字隨機排序。

+0

我不是一個PHP的傢伙,但你可以使用'for'而不是'while'來限制循環到10,000? – 2012-07-07 15:03:05

+0

@ChrisGessler嗨,克里斯,第一個循環運行良好,限制了票數,這是第二個循環中的數字被添加到門票,這給出了意想不到的結果,我只是不明白爲什麼那裏太多的門票被添加... – 2012-07-07 15:04:51

+0

我想我不明白,你說適量的門票,然後說太多門票...無論如何,我會擺脫while循環和foreach循環並用for循環替換。 – 2012-07-07 15:07:02

回答

2

更改foreach循環爲:

for ($i = 1; $i <= $numbersPerTickets; $i++) { 
    $query = ' 
     INSERT INTO ticketNumbers( 
      ticketID, 
      number 
     ) 
     VALUES( 
      "'.$ticketID.'", 
      "'.$randomTicketNumbers[$i].'" 
     ) 
    '; 

保證只給你$ numbersPerTickets迭代和刪除迭代器++ /中斷邏輯的複雜性。

有時候簡單會更好。

請更正我的php! TIA。

+0

要去它,需要清空我插入的測試,數百萬行:S – 2012-07-07 15:32:29