我想通过将记录从一个表移动到另一个表来存档学生。这是我尝试使用的代码:
<?php
ini_set('memory_limit', '100M');
$sql="Select * from `register` where student_id=".$student_id;
$result=mysql_query($sql);
$row=mysql_fetch_array($result);
//Call the function to archive the table
//Function definition is given below
archive_record(archive,$row);
//Once you archive, delete the record from original table
$sql = "Delete from `register` where student_id=".$student_id;
mysql_query($sql);
function archive_record($archived_tablename,$row)
{
$sql = "insert into $archived_tablename values(";
$i=0;
while($i<(count($row)-1))
{
$sql.="'".$row[$i]."',";
}
$i=$i+1;
$sql.="'".$row[$i]."'";
$sql.=")";
mysql_query($sql);
return true;
}
我遇到的问题是我收到错误:
致命错误:第XX行的/archive-student.php内存不足(已分配80478208)(尝试分配80216043字节)
有没有不同的方法来做到这一点,除了有一个名为archive的列并从0更改为1?这是因为我有30-50页选择表的记录。 :)
答案 0 :(得分:28)
INSERT INTO archive_table
SELECT * FROM original_table WHERE id = 1
这很简单。
如果表格具有不同的列号,其他布局等,则必须指定列:
INSERT INTO archive_table(field1, field2, field3)
SELECT field7, field8, field9 FROM original_table WHERE id = 1
答案 1 :(得分:3)
INSERT INTO new_table SELECT id FROM old_table
这是将一个表行从任何表移动到所需表的最佳做法。
答案 2 :(得分:2)
while($i<(count($row)-1))
{
$sql.="'".$row[$i]."',";
}
$i=$i+1;
你必须在循环中做$i=$i+1;
...
但是,
INSERT INTO archive TABLE
SELECT FROM original_table WHERE id = 1
是最好的方法;)
答案 3 :(得分:0)
waitpid