MySQL Insert :: MAX(FIELD)+1 - 如果为null

时间:2012-11-28 14:38:47

标签: php mysql

  

可能重复:
  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。

2 个答案:

答案 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')。