2009-06-22 54 views
1

,我发现了以下错误:列数并不在行1从该查询匹配值计数:列数错误

$movetohistory = mysql_query("INSERT INTO $storehistory SELECT * FROM $storetbl WHERE $time - datecreated >= 432000") or die ("Query failed: " . mysql_error() . " Actual query: " . $query); 

我已经回显了$ storehistory,$ storetbl,$时间&一切都很好。两个表都有相同的列/数据类型。我唯一可以假设的是,由于$ storetbl没有填写所有字段,所以出现了列计数错误。但是,我认为指定SELECT * ALL会超过这个。

如果你能指出我正确的方向,我会很感激。如果你需要更多的片段,请告诉我。

谢谢。

回答

2

因为你的子查询返回的多个列相比,可以插入:

INSERT INTO $storehistory SELECT * FROM $storetbl WHERE $time - datecreated >= 432000" 

为清楚起见,你应该加上括号的子查询:

INSERT INTO $storehistory (SELECT * FROM $storetbl WHERE $time - datecreated >= 432000)" 

编辑:

我只是执行该查询,并且它与两个相同的表格完美配合:

insert into users_copy select * from users 

我会仔细检查你的数据结构是否相同。

+0

你确实是对的。我忽略了列中的一个轻微数据结构。感谢您的彻底。解决了! – asdfasdfasdfasdf 2009-06-22 09:39:54

0

这种代码很难在数据库更改的情况下维护。

我建议你明确列出INSERT和SELECT部分​​的列。例如,可以更改生产中的表格的列顺序,或添加或删除列。