2012-03-16 100 views
2

我正在查询我的数据库中的大量代码,并且在用户可以将其他代码输入到数据库之前需要进行一些验证。比较从mySql查询返回的字符串

一个例子代码将是这样的:

TD-BR-010212-XXXXXXXX

其中TD代表推广,BR代表的地方,这些数字代表日期,其余都是随机的。

我的问题是,在代码输入到数据库之前,我想检查该代码的日期和地点是否已经存在,因为它们不应该被允许从同一地点和日期输入代码。

我认为这将是一个循环内的东西,因为我已经有了:

$location_part_of_td = $code[2].$code[3]; 
$date_part_of_td = $code[4].$code[5].$code[6].$code[7].$code[8].$code[9]; 

$trade_day_result = mysql_query('SELECT * from wp_scloyalty WHERE promotion_type = trade-day') or die(mysql_error()); // Pulls all trade day codes from the database and checks the date part of the code. 

// the date part exists with the same area part, user cant redeem. 
while($info = mysql_fetch_array($trade_day_result)) 
{ 

    $code = $info["product"]; 

} 

但我只是不知道检查字符串的最好方式..

+1

如果仅仅是开始地点和日期,你可以创建一个带有前缀的唯一索引。 – 2012-03-16 12:54:58

回答

3

您可以使用MySQL LIKE子句来获取类似于您的代码的数据库中的条目。

实施例:

$code_exists = mysql_query( 
     "SELECT 'a' FROM table_name WHERE column_name LIKE 'TD-BR-010212-%'" 
); 
if(mysql_num_rows($code_exists) > 0) { 
    // The specified place/date is taken 
} else { 
    // No promotion at place BR on the specified date. 
} 

的 '%' 被用作在SQL LIKE子句通配符。

0

您有两种解决此问题的方法。假设你有权修改表格。

添加一个唯一的约束到表中的两个列。

或者你的方法是选择所有的位置和日期,看它是否返回任何结果。 SQL:SELECT COUNT(*) as counter FROM table where column = 'TD-BR-010212-%' 并检查计数器是否返回> 0;

0

我会在SELECT和拉条目中使用LIKE语句,这些条目以相同的促销,地点和日期开始。不幸的是,我不知道你的表看起来如此容忍我:

$promo_query = "SELECT * FROM wp_sclocalty WHERE column_name LIKE 'TD-BR-010212-%'"; 
$promo_result = mysql_query($promo_query); 

if(mysql_num_rows($promo_result) == 0) { 
    // the promo code has NOT been used 
} else { 
    // the promo code HAS been used 
} 
0

如果可以的话,你会如果你掰开代码到不同的领域,当你保存数据得到更好的性能和更容易编码每一行。这样,您可以编写专门检查组件代码值的查询 - 甚至可以在数据库中设置规则(如UNIQUE)以确保某些部分保持唯一。

具体,我建议:

create table your_table (
    [... your other columns ...] 
    promotion char(2), 
    place char(2), 
    pr_date date, 
    pr_ident varchar(50) 
) 

你的第一行会([...], 'TD', 'BR', '2012-01-02', 'XXXXXXXX') 。并且查询不需要解包格式化的字符串 - 你可以这样说:“where promotion ='TD'并放入('BR','XX')...”。简单,呃?

+0

感谢您的回复。出于这个原因,我已经制作了一个promotion_type列,但没有列的其余部分。好主意,但生病尝试。 – JamesG 2012-03-16 13:06:51

0

尝试此查询

$part_code=substr($code, 0) 

$records =mysql_query("select id from tableName where SUBSTRING(code,1,12)= $part_code"); 

if(mysql_num_rows($records) > 0) 
{ 
// Duplicate exit 
} 
else 
{ 
// insert code in DB 
} 
相关问题