我想比较两个MySQL表,如果不在table 2
,则删除table 1
列。我正在使用的代码是
<?php
mysql_connect("localhost", "root", "") or die(mysql_error());
mysql_select_db("test") or die(mysql_error());
$fields = array();
$fields2 = array();
$dropcols = array();
$res=mysql_query("SHOW COLUMNS FROM table1");
$res2=mysql_query("SHOW COLUMNS FROM table2");
while ($x = mysql_fetch_assoc($res)) {
$fields[] = $x['Field'];
}
while ($x = mysql_fetch_assoc($res2)) {
$fields2[] = $x['Field'];
}
$diff = array_diff($fields2,$fields);
$arraylen = count($diff);
for ($x=0; $x < $arraylen; $x++) {
mysql_query("ALTER TABLE table2 DROP $diff[$x]");
}
有时候代码工作,有时会发出错误未定义的偏移量0.我不知道错误的位置。
答案 0 :(得分:1)
array_diff
没有重新索引结果数组的元素,它们保留索引fields
,因此索引中存在间隙。无论索引如何,都使用foreach
循环遍历数组值。
foreach ($diff as $column) {
mysql_query( "ALTER TABLE table2 DROP $column");
}
或者你可以这样做:
$diff = array_values(array_diff($fields2, $fields));
答案 1 :(得分:-1)
有时数组$ diff将不包含任何值