比较从mySql查询返回的字符串

时间:2012-03-16 12:44:50

标签: php mysql string

我正在查询我的数据库中的大量代码,并且在用户可以将另一个代码输入到数据库之前需要进行一些验证。

示例代码是:

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"];

} 

但我只是不确定检查字符串的最佳方法..

5 个答案:

答案 0 :(得分: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子句中用作通配符。

答案 1 :(得分:0)

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

从两列中的表格基础添加唯一约束。

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

答案 2 :(得分: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
}

答案 3 :(得分: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')。并且查询不需要解压缩格式化的字符串 - 你可以说“促销='TD',并放入('BR','XX')......”。简单,嗯?

答案 4 :(得分: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
}