2016-09-27 48 views
0

我正在檢查一個項目,我發現這個代碼是假設從MySQL刪除記錄,儘管這不是最好的方法來實現這個我必須做出這個工作,但對我來說是好的,這就是爲什麼我在這裏,因爲我沒有看到錯誤或這個代碼有什麼問題,不顯示錯誤,警告,沒有什麼我直接在PHPMyAdmin測試代碼,它運行良好,所以這是代碼...從foreach循環中的MySQL刪除記錄 - PHP

$get_records = mysql_query('SELECT id_detail FROM my_table WHERE user_id = "'.$user_id.'" AND last_date BETWEEN "'.$date1.'" AND "'.$date2.'"') or die (mysql_error()); 

$array_details = array(); 

while ($details = mysql_fetch_array($get_records)) { 

    $array_details[] = $details['id_detail']; 

} 


$array_details = array_unique($array_details); 


foreach ($array_details as $id_detail) { 

    $delete_detail = mysql_query("DELETE FROM my_table WHERE user_id = '".$user_id."' AND id_detail = '".$id_detail."'") or die (mysql_error()); 
} 

我用相同的ID細節(這這樣工作)在同一個表有兩個記錄,所以如果我與foreach循環中查詢得到的ID正確地將它應該刪除所有與id_detailuser_id記錄並不重要,如果在查詢我說這之間的日期得到這些ID,它刪除只有一個,那一個是具有

我不知道這是爲什麼範圍之間的日期不刪除兩個,關於我失蹤的一些想法?

注意:正如我之前所說,如果我直接在PHPMyAdmin中執行該查詢,它工作正常,如果我從PHP中刪除它,則只刪除一個。

+0

也許它只能得到一個id而不是兩個(在這個腳本中) –

+0

爲什麼你會使用PHP作爲這個中間人?您正在迴避MySQL的內置邏輯並通過n + 1增加您的查詢。爲什麼不做一個'DELETE FROM {logic}'語句?即使由於某種原因,您確實希望在所有這些東西之間都有PHP邏輯,但您有一組主鍵(假設),那麼爲什麼不利用'WHERE IN'來減少查詢呢? – Blake

+0

如果您在表格中始終有2個條目,則按偏移量進行刪除可能會解決此問題,如i = 0; foreach($ a as $ b){$ my_query to del $ b [0]; $ I ++;} – xYuri

回答

0

用這個查詢代替那個代碼對你有用嗎?

$delete_detail = mysql_query("DELETE FROM my_table WHERE user_id = '".$user_id."' AND id_detail IN (SELECT id_detail FROM my_table WHERE user_id = '".$user_id."' AND last_date BETWEEN '".$date1."' AND '".$date2."')") or die (mysql_error()); 
+0

來跳過用戶提交的值,我會試試這個 –

+0

這會增加像''.2.'''這樣的值。它在語法上是正確的,這是一種改進,但錯過了目標。 – tadman

+0

仍然不能正常工作,但是和以前一樣,它只刪除一個>:] –