我想將一些PHP代碼轉換爲一個MySQL存儲過程。以下是PHP代碼:MySQL爆炸字符串?
$aORs = array(); // create an empty array to hold the individual criteria to be OR'd...
$months = explode('|',$_REQUEST['sSearch_'.$i]);
$sWhere .= '(';
foreach($months as $month) {
$year = intval(substr($month, 0, 4));
$mon = intval(substr($month, 5, 2));
array_push($aORs, '(MONTH(e.StartDate) = '.$mon.' and YEAR(e.StartDate) = '.$year.')');
}
$sWhere .= implode(" OR ",$aORs); // transform the array of criteria into a properly delimited WHERE clause...
$sWhere .= ')';
我將參數傳遞到存儲過程是這樣的:
2012-07|2012-10|2013-02
我無法搞清楚如何上面的輸入解析成看起來WHERE子句像這樣:
(MONTH(e.sDate) = 07 AND YEAR(e.sDate) = 2012) OR
(MONTH(e.sDate) = 10 AND YEAR(e.sDate) = 2012) OR
(MONTH(e.sDate) = 02 AND YEAR(e.sDate) = 2013) OR
如何在存儲過程中執行此操作?我見過「臭名昭着的」split_str函數,但我不知道可能有多少個值。
參數將形成良好,可能會超過1.我不打算修改表的結構。 – MB34 2012-07-09 18:00:34
使用INSTR的第一個工作完美。我不必再解析出這些值。它也適用於國家,因爲我們以相同的方式通過它們。 – MB34 2012-07-09 18:05:17
@ MB34:很高興聽到它爲你工作。你說你不打算修改表格的結構。我沒有看到你需要這樣做的任何理由。我不相信我在任何地方都會建議你需要改變桌子的結構,或者它會帶來任何好處。 (根據我對INSTR方法的建議,我只是建議查詢使用可用索引,晚上需要更詳細的查詢。) – spencer7593 2012-07-09 18:19:54