2012-03-16 70 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 
}