请帮我看看这个solution.im处理一个非常大的数据记录,如2M的学生测试结果记录。所有记录都存储在一个表中,我需要做的是单独这个记录分成两个不同的表格,一个用于所有通过学生,另一个用于失败学生。在分开这个记录之后,我需要从源表格中删除原始记录。每当我运行这个代码时,它需要几个小时才能完成。如果任何人都可以帮助我找出解决方案,这将是非常棒的。谢谢。移动大记录表的最快方法mysql
这里是示例代码:
<?php ob_start(); ?>
<?php
function spread($classselect,$subjectselect)
{include "connectdb.php";
//movepass
$selectpass = mysql_query("SELECT * FROM testresultAUG2012 WHERE actualmonth='AUG' AND testresult = 'PASS' AND classname = '$classselect' AND educationsubject = $subjectselect;",$conn);
$totalpass = mysql_num_rows($selectpass);
$pass=0;
while($pass<$totalpass)
{
$name=mysql_result($selectpass, $pass, "Studentname");
$subject=mysql_result($selectpass, $pass, "Subject");
$testbatch=mysql_result($selectpass, $pass, "testbatch");
$classname=mysql_result($selectpass, $pass, "class");
$lecturer=mysql_result($selectpass, $pass, "lecturer");
$date=mysql_result($selectpass, $pass, "date");
$month=mysql_result($selectpass, $pass, "month");
$time=mysql_result($selectpass, $pass, "time");
$state=mysql_result($selectpass, $pass, "result");
//count total pass subject and add 1
$totalpass = mysql_query("SELECT * FROM Student WHERE Studentname = '$name';",$conn);
$only = mysql_fetch_array($theone);
$currentpass = $only['totalpass'];
$newpass = $currentpass + 1;
mysql_query("UPDATE Student SET totalpass = $newpass WHERE Studentname = '$name';",$conn);
//save record to pass table
mysql_query("INSERT INTO passtab(......) VALUES(....);",$conn);
//remove data from origin table
mysql_query("DELETE FROM testresultAUG2012 WHERE Studentname = '$name' AND testbatch = $testbatch AND Subject=$subject AND result = 'PASS' AND class = '$classname';",$conn);
$pass++;
}
//moveFailed
$selectfail = mysql_query("SELECT * FROM testresultAUG2012 WHERE actualmonth='AUG' AND testresult = 'PASS' AND classname = '$classselect' AND educationsubject = $subjectselect;",$conn);
$totalfail = mysql_num_rows($selectfail);
$fail=0;
while($fail<$totalfail)
{
$name=mysql_result($selectfail, $fail, "Studentname");
$subject=mysql_result($selectpass, $fail, "Subject");
$testbatch=mysql_result($selectfail, $fail, "testbatch");
$classname=mysql_result($selectfail, $fail, "class");
$lecturer=mysql_result($selectfail, $fail, "lecturer");
$date=mysql_result($selectfail, $fail, "date");
$month=mysql_result($selectfail, $fail, "month");
$time=mysql_result($selectfail, $fail, "time");
$state=mysql_result($selectfail, $fail, "result");
//count total fail subject and add 1
mysql_query("UPDATE Student SET totalfail = totalfail + 1 WHERE Studentname = '$name';",$conn);
//save record to fail table
mysql_query("INSERT INTO failtab(....) VALUES(...);",$conn);
//remove data from origin table
mysql_query("DELETE FROM testresultAUG2012 WHERE Studentname = '$name' AND testbatch = $testbatch AND Subject=$subject AND result = 'FAIL' AND class = '$classname';",$conn);
$fail++;
}
}
?>
<?php
$relatedclass=$_POST[classup];
$relatedsubject=$_POST[subject];
spread($relatedclass,$relatedsubject);
echo "<center>Spread Completed !!!</CENTER>";
?>
<? ob_flush(); ?>
为什么不干脆添加一个布尔列来显示学生是否通过或失败? – 2012-08-08 09:04:27
避免使用**选择** *,而不是使用字段 – 2012-08-08 09:08:02