可能重复:
Moving a row from one table to another (Insert value list does not match column list)
对于我的一个插入,我有以下内容:(PDO / MySQL)
$this->sql = "INSERT INTO tblfixedfares NULL, SELECT NULL, IFNULL(MAX(FixedFareId), 0) + 1, '$fieldFrompc', '$fieldTopc', '$fieldDay', '1', 'Car') FROM tblfixedfares;
INSERT INTO tblfixedfares NULL, SELECT NULL, IFNULL(MAX(FixedFareId), 0) + 1, '$fieldFrompc', '$fieldTopc', '$fieldNight', '2', 'Car') FROM tblfixedfares;";
基本上,这不起作用,因为它没有为FixedFareId
插入值。
我想要做的是将FixedFareId设置为大于最高固定票价id值,如果为null则将FixedFareId设置为1。
不确定代码的确切问题是什么,但我可以看到它没有为FixedFareId拾取任何内容,因为我得到了以下响应:
Error: SQLSTATE[21S01]: Insert value list does not match column list: 1136 Column count doesn't match value count at row 1SQL
INSERT INTO tblfixedfares VALUES (NULL, 'le675', 'le115', '11', '1', 'Car');
INSERT INTO tblfixedfares VALUES (NULL, 'le675', 'le115', '22', '2', 'Car');
基本上两个插入在一个查询中发生,如果数据库中没有任何内容,则FixedFareId需要为1:
所以第一次插入需要是:
INSERT INTO tblfixedfares VALUES (NULL, **1**, 'le675', 'le115', '11', '1', 'Car');
INSERT INTO tblfixedfares VALUES (NULL, **1**, 'le675', 'le115', '22', '2', 'Car');
下一个插入是:
INSERT INTO tblfixedfares VALUES (NULL, **2**, 'le675', 'le115', '11', '1', 'Car');
INSERT INTO tblfixedfares VALUES (NULL, **2**, 'le675', 'le115', '22', '2', 'Car');
数据库如下:
id, FixedFareId ,ShortPostcodeA,ShortPostcodeB,Fare,DayHalf,VehicleSystemId
id是autoincrement,如果为null,则fixedfareid需要为1,如果不为null,则fixedfareid的最大值为+1。
答案 0 :(得分:1)
更改您的查询:
INSERT INTO tblfixedfares (SELECT NULL, IFNULL(MAX(FixedFareId), 0) + 1, '$fieldFrompc', '$fieldTopc', '$fieldDay', '1', 'Car' FROM tblfixedfares);
答案 1 :(得分:0)
也许您正在寻找:
INSERT INTO tblfixedfares SELECT NULL, COALESCE(MAX(FixedFareId),0) + 1, etc..
因此,如果FixedFareId的MAX为NULL,则将其视为零,然后将“1”添加到其中,如果该字段为空,则结果为“1”。 (因为MAX(NULL)产生'NULL')。