2014-12-07 36 views
0

我有以下陣列:PHP數組到MySQL查詢條件結構

$arr = [1, 3, '4A', '5A', '5C', '2B', '2C', '2E']; 

不知怎的,我需要將此數組轉換爲一個字符串,如下所示:

$filter =  "(id like '1%') OR 
       (id like '3%') OR 
       (id like '4A%') OR 
       (id like '5A%' OR id like '5C%') OR 
       (id like '2B%' OR id like '2C%' OR id like '2E%')"; 

的第一個字符的該數組值指示一個唯一的類別幷包裹在括號中。最後我會用這個來查詢數據庫;

$sql = "SELECT * FROM list WHERE {$filter}"; 

有人可以幫我把這個數組轉換成正確的字符串嗎?什麼是實現這一目標的最佳方法?

給你一個我想要的東西的想法: 我的數據庫行中的'id'列看起來像; 1B2875。第一個字符(1)表示分類,第二個字符(B)表示子類別。給定的數組是客戶端過濾器請求的結果。

+0

如果還不算太晚,我真的會建議將這個標準化,並使用關係到一個'category',並且讓'ID'成爲一個auto_increment整數。你現在正在使用的這個設置可能會在以後造成很多傷害。 – prodigitalson 2014-12-07 01:32:44

回答

2

可以在SQL中使用正則表達式:

SELECT * FROM list WHERE id REGEXP '^(1|3|4A|…)[0-9]+$'

可以用PHP函數implode('|', $filter_strings)

請注意,您應該驗證和第一躲避過濾字符串要生成的括號內的值防止用戶輸入操縱查詢。功能preg_quote在這裏很有用。

+1

與MySQL方面的正則表達式思考外的榮譽。 – 2014-12-07 01:31:35