2011-01-25 26 views
0

我需要更新360行。顯然這不能正常工作。任何幫助,請mysql使用CASE用for循環更新多行

for ($i = 1; $i <= 360; $i++) { 

    $info = mysql_real_escape_string($_POST[$i]); 
    $check = mysql_real_escape_string($_POST[''.$i.'Check']); 

     $case = "WHEN '$i' THEN '$info'"; 
} 

    $sql = "UPDATE $table 
      SET info = CASE id 
       $case 
      END 
      WHERE ID in (1-360)"; 

    mysql_query($sql) 
     or die (mysql_error()); 
+0

1.「不行」不解釋2.給普通的sql查詢,根本沒有php。 – zerkms 2011-01-25 23:52:41

回答

1

有至少一個(不是很?)明顯的理由,這並不工作 - 你與循環的每次迭代更換$案的內容。 $case .= "WHEN '$i' THEN '$info'\n";(注意等號前的小圓點)可能已經讓你更進一步。另一個可能是$ i在查詢內部放入單引號,而ID列往往是數字。

我沒有嘗試並運行您的代碼。如果它仍然「不起作用」,您應該編輯您的問題並添加更多信息,如表格結構和錯誤消息。

除此之外,你可以這樣做:

$sql = "UPDATE $table SET\n"; 
for ($i = 1; $i <= 360; $i++) { 

    $info = mysql_real_escape_string($_POST[$i]); 
    //$check = mysql_real_escape_string($_POST[''.$i.'Check']); 
    // What's that $check for? 

    $sql .= "info = '$info' where ID = $i\n"; 
} 

mysql_query($sql) 
    or die (mysql_error()); 

運行批處理對報表服務器的情況並不少見,甚至可能不是找了一個360線CASE構造的匹配值產生更好的性能。