2011-01-25 101 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构造的匹配值产生更好的性能。