【问题标题】:MySQL Insert :: MAX(FIELD)+1 - if null [duplicate]MySQL 插入 :: MAX(FIELD)+1 - 如果为空 [重复]
【发布时间】:2012-11-28 14:38:46
【问题描述】:

可能重复:
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值的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若为null则为1,不为null则为fixedfareid最大值+1。

【问题讨论】:

  • 你能发布这个查询的结果吗,DESC tblfixedfares

标签: php mysql


【解决方案1】:

像这样更改您的查询:

          INSERT INTO tblfixedfares (SELECT NULL, IFNULL(MAX(FixedFareId), 0) + 1, '$fieldFrompc', '$fieldTopc', '$fieldDay', '1', 'Car' FROM tblfixedfares);

【讨论】:

  • 这个我试过了,还是不行。不是为 FixedFareId 选择 MAX 值,这就是计数不正确的原因
  • 当您想要处理表事件如更新、插入或删除 (dev.mysql.com/doc/refman/5.0/en/create-trigger.html) 时使用触发器,以便您可以添加 post/pre 数据处理
【解决方案2】:

也许您正在寻找:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-20
    • 1970-01-01
    • 2023-03-28
    • 2013-12-22
    • 2017-10-19
    • 1970-01-01
    • 1970-01-01
    • 2013-05-02
    相关资源
    最近更新 更多