Hy vọng điều này sẽ giúp ai đó ... Đây là một đoạn mã PHP nhỏ mà tôi đã viết trong trường hợp bạn cần sao chép một số cột nhưng không phải những cột khác và / hoặc các cột không theo cùng một thứ tự trên cả hai bảng. Miễn là các cột được đặt tên giống nhau, điều này sẽ hoạt động. Vì vậy, nếu bảng A có [userid, handle, something] và tableB có [userID, handle, timestamp], thì bạn "CHỌN userID, handle, NOW () làm dấu thời gian TỪ tableA", sau đó nhận kết quả của điều đó và truyền kết quả làm tham số đầu tiên cho hàm này ($ z). $ toTable là tên chuỗi cho bảng bạn đang sao chép và $ link_identifier là db bạn đang sao chép vào. Điều này tương đối nhanh đối với các tập dữ liệu nhỏ. Bạn không nên cố gắng di chuyển hơn vài nghìn hàng cùng một lúc theo cách này trong cài đặt sản xuất.
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);
}