php et mysql copie de l'enregistrement à partir d'une table à l'autre
Je voudrais archiver un étudiant en déplaçant l'enregistrement à partir d'une table à l'autre. C'est le code que j'essaie d'utiliser:
<?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;
}
Problème que j'ai c'est que je suis d'erreur:
Fatal error: Out of memory (alloués 80478208) (tried to allocate 80216043 bytes) in /archive-student.php sur la ligne XX
Est-il une autre façon de le faire, sauf pour avoir une colonne appelée archive et un passage de 0 à 1? C'est parce que j'ai de 30 à 50 pages de la sélection de la table des enregistrements. 🙂
- Vous pouvez utiliser un
INSERT ... SELECT
. Quelle est la structure de vos tables?
Vous devez vous connecter pour publier un commentaire.
simple que cela.
Si les tables ont différentes numéro de colonne, d'autres la mise en page etc., vous devez spécifier des colonnes :trop
*
manquant dans les sélectionner, juste corrigé.BEGIN
etCOMMIT
de bon sens ici. Si le script pauses comment puis-je continnue où il s'était arrêté. Désolé, c'est dans la portée de la question de l'OPSELECT * FROM original_table LIMIT 10000 OFFSET 0
et après ilSELECT * FROM original_table LIMIT 10000 OFFSET 10000
. Cela vous permet d'enregistrer des progrès entre des blocs de données.C'est la meilleure pratique pour se déplacer d'une ligne de tableau à partir d'une table à table.
Que vous avez à faire
$i=$i+1;
l'intérieur de la boucle...Mais,
est la meilleure façon de le faire 😉