J'espère que cela pourra aider quelqu'un... Voici un petit script PHP que j'ai écrit au cas où vous auriez besoin de copier certaines colonnes mais pas d'autres, et/ou les colonnes ne sont pas dans le même ordre sur les deux tables. Tant que les colonnes portent le même nom, cela fonctionnera. Donc, si la table A a [userid, handle, quelque chose] et la table B a [userID, handle, timestamp], alors vous devriez "SELECT userID, handle, NOW() as timestamp FROM tableA", puis obtenir le résultat de cette opération, et passer le résultat comme premier paramètre à cette fonction ($z). $toTable est un nom de chaîne pour la table vers laquelle vous copiez, et $link_identifier est le db vers lequel vous copiez. C'est relativement rapide pour les petits ensembles de données. Il n'est pas recommandé d'essayer de déplacer plus de quelques milliers de lignes à la fois de cette façon dans un environnement de production. Je l'utilise principalement pour sauvegarder les données collectées au cours d'une session lorsqu'un utilisateur se déconnecte, puis j'efface immédiatement les données de la base de données active pour la garder mince.
function mysql_multirow_copy($z,$toTable,$link_identifier) {
$fields = "";
for ($i=0;$i<mysql_num_fields($z);$i++) {
if ($i>0) {
$fields .= ",";
}
$fields .= mysql_field_name($z,$i);
}
$q = "INSERT INTO $toTable ($fields) VALUES";
$c = 0;
mysql_data_seek($z,0); //critical reset in case $z has been parsed beforehand. !
while ($a = mysql_fetch_assoc($z)) {
foreach ($a as $key=>$as) {
$a[$key] = addslashes($as);
next ($a);
}
if ($c>0) {
$q .= ",";
}
$q .= "('".implode(array_values($a),"','")."')";
$c++;
}
$q .= ";";
$z = mysql_query($q,$link_identifier);
return ($q);
}
0 votes
Vous pourriez jeter un coup d'oeil à ça. Cela a fonctionné pour moi dans mysql. stackoverflow.com/questions/57168/