0

可能重复:
将行从一个表移动到另一个表(插入值列表与列列表不匹配)

对于我的插入之一,我有以下内容:(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 值的 1,如果为 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 为自增,fixedfareid 为 1 为空,fixedfareid 的最大值为+1 不为空。

4

2 回答 2

1

像这样更改您的查询:

          INSERT INTO tblfixedfares (SELECT NULL, IFNULL(MAX(FixedFareId), 0) + 1, '$fieldFrompc', '$fieldTopc', '$fieldDay', '1', 'Car' FROM tblfixedfares);
于 2012-11-28T14:47:15.093 回答
0

也许您正在寻找:

INSERT INTO tblfixedfares SELECT NULL, COALESCE(MAX(FixedFareId),0) + 1, etc..

因此,如果 FixedFareId 的 MAX 为 NULL,则将其视为零,随后将“1”添加到其中,如果该字段为空,则结果为“1”。(因为 MAX(NULL) 产生“NULL”)。

于 2012-11-28T15:10:03.390 回答