gpt4 book ai didi

php - 如何复制 mysql 表,添加一些列并删除一些列,更改顺序并保留与新表相关的任何数据?

转载 作者:行者123 更新时间:2023-11-30 00:05:18 27 4
gpt4 key购买 nike

我希望 WordPress 用户能够更改数据库表的结构,同时保留未更改的列中的数据。

到目前为止我的策略是:

  1. 使用新结构创建一个名为 table_temp 的新表。
  2. 对于旧表中存在于新表中的每一列,循环遍历旧表的行并将值插入到新表中表列。
  3. 删除旧表并将新表重命名为旧表表。

第 2 步是我出错的地方,所以我还没有考虑第 3 步。第一列工作正常,但插入第二个保留列的值从插入第一列的最后一个值后面的行开始。

function update_table($_POST) {
global $wpdb;

//collect the updated table's metadata from the $_POST


$slug = $_POST[slug].'_temp';
$WB_table = $_POST[slug];
unset($_POST[slug]);
unset($_POST[tblAppendGrid_rowOrder]);
unset($_POST[status]);

// create the new temp table
$wpdb->query("
CREATE TABLE $slug (
id INT (6) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (id)
) ENGINE=MyISAM;
");

//remove reference to the old meta in WB_table _meta
$wpdb->delete( 'WB_table_meta', array( 'WB_table' => $WB_table ) );

// add the new meta to WB_table _meta
// loop through the $_POST array
for($i=1;$i<=count($_POST)/5;$i++) {

// pull the array elemnts from $_POST
$name = $_POST['tblAppendGrid_name_'.$i];
$display = $_POST['tblAppendGrid_display_'.$i];
$type = $_POST['tblAppendGrid_type_'.$i];
$maxlength = $_POST['tblAppendGrid_maxlength_'.$i];
$width = $_POST['tblAppendGrid_width_'.$i];

// Add column names to the new table
$wpdb->query("ALTER TABLE ".$slug." ADD ".$name." text(160)");

// Add meta to WB_table_meta
$wpdb->insert('WB_table_meta',
array(
'WB_table' => $WB_table,
'name' => $name,
'display' => $display,
'type' => $type,
'maxlength' => $maxlength,
'width' => $width),
array('%s','%s','%s','%s','%s','%d','%d')
);

//copy data to the new table from the old table if the column exists in the new table

if ($wpdb->query("SELECT ".$name." from ".$WB_table."", A_ARRAY) == true) {
$rows = $wpdb->get_col("SELECT ".$name." from ".$WB_table."");

foreach($rows as $row){
$wpdb->query("INSERT INTO $slug ($name) VALUES ('$row')");
$wpdb->show_errors();

} //for each

} // if

} // for loop

} // function update_table

创建的新表如下所示,但它应该只有两行。

14  kitchen NULL    NULL    NULL    NULL    NULL
15 kitchen NULL NULL NULL NULL NULL
16 NULL laundry NULL NULL NULL NULL
17 NULL laundry NULL NULL NULL NULL
18 NULL NULL office NULL NULL NULL
19 NULL NULL office NULL NULL NULL
20 NULL NULL NULL 8:00 NULL NULL
21 NULL NULL NULL 8:00 NULL NULL
22 NULL NULL NULL NULL 8:10 NULL
23 NULL NULL NULL NULL 8:10 NULL
24 NULL NULL NULL NULL NULL 8:15
25 NULL NULL NULL NULL NULL 8:15

最佳答案

谢谢VMai。你的建议效果很好。以下代码生成了一个包含正确字段的新表。

// build the column string
if ($wpdb->query("SELECT ".$name." from ".$WB_table."", A_ARRAY) == true) {
$cols .= $name.',';
} // if
} // for loop


$col = substr($cols, 0, -1);

//copy data to the new table from the old table if the column exists in the new table
$wpdb->query("
INSERT INTO ".$slug."
(".$col.")
SELECT ".$col."
FROM ".$WB_table."
");
$wpdb->show_errors();

关于php - 如何复制 mysql 表,添加一些列并删除一些列,更改顺序并保留与新表相关的任何数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24611201/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com