2011-01-19 77 views
3

我想在大批量(使用php/mysql)中创建促销代码。什么是生成大量独特促销代码的最佳方式?

目前我的代码看起来是这样的:

$CurrentCodesInMyDB = "asdfasdf,asdfsdfx"; // this is a giant comma delimited string of the current promo codes in the database. 
$PromoCodes = ""; 
for($i=0;$i<=30000;$i++) 
{ 
    $NewCode = GetNewCode($PromoCodes, $CurrentCodesInMyDB); 
    $PromoCodes .= $NewCode . ","; //this string gets used to allow them to download a txt file 
    //insert $newcode into database here 
} 

function GetNewCode($CurrentList, $ExistingList) 
{ 
    $NewPromo = GetRandomString(); 
    if(strpos($CurrentList, $NewPromo) === false && strpos($ExistingList, $NewPromo) === false) 
    { 
      return $NewPromo; 
    } 
    else 
    { 
      return GetNewCode($CurrentList, $ExistingList); 
    } 
} 

function GetRandomString() 
{ 
    return "xc34cv87"; //some random 8 character alphanumeric string 
} 

当我在10K批次,它似乎是确定。但客户希望能够一次生成30k。当我将环路撞到30k时,我遇到了问题。是否有任何明显的性能调整,或者我可以做到这一点?

+0

什么样的“问题”你一直在数组键检查? – thetaiko 2011-01-19 15:50:35

+3

为什么你将代码存储在一个巨大的字符串中,而不是一个数组? – Jens 2011-01-19 15:52:13

+0

这些代码存储在一个包含索引的表格中。我在列表中保留了这个列表,以便我可以将一个逗号分隔列表写入一个文本文件。 – Jason 2011-01-19 16:07:10

回答

2

具体有什么样的问题?

我的建议是:不要以CSV格式存储代码,而应创建一个新的索引列并将每个代码存储在其自己的行上 - 同样,使用准备好的查询。

做60000上〜250 KB串strpos()可能不是有史以来最好的想法...

+0

我不太清楚老实说,当脚本运行时,我的电脑第一次冻结了。第二次完成像30k的22k,然后页面停止渲染。我想我会拿出内存中的字符串 – Jason 2011-01-19 15:56:20

4

你可能不需要有加载到内存中一个巨大的字符串共有30,000码。只需在数据库中创建一个表格,添加一个code唯一字段(主键或唯一索引)并插入随机代码,直到您有30,000个成功的插入。

相关问题