我正在查询我的数据库中的大量代码,并且在用户可以将另一个代码输入到数据库之前需要进行一些验证。
示例代码是:
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"];
}
但我只是不确定检查字符串的最佳方法..
答案 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
}