【问题标题】:MySQL INSERT WHEN field is Greater than php variable valueMySQL INSERT WHEN 字段大于 php 变量值
【发布时间】:2012-03-13 05:08:34
【问题描述】:

我在 php $newtotal 中有一个动态变量。当这个变量大于我的 MAX 数据库整数时,我想INSERT

$newtotal = 4000;

mysql_query("INSERT INTO mytable (`DATE`, `TOTAL`, `DBTOTAL`) VALUES ('2012-03-09', '1', '$newtotal') WHERE MAX(`DBTOTAL`) < '$newtotal'");

即。在我的数据库中,我的 MAX(DBTOTAL) = 4050;

这不应该INSERT;当$newtotal 更改为大于4050 时,它也应该正确INSERT,但是我在任一变量号上都出现语法错误。在此处需要语法方面的帮助。

【问题讨论】:

    标签: php mysql insert


    【解决方案1】:

    您不能在INSERT 语句中使用WHERE 子句。您需要检查该值以查看是否要插入,如果满足您的条件则执行此操作。

    例如:

    $result = mysql_query("
        SELECT MAX(DBTOTAL)
        FROM table
    ");
    
    list($max) = mysql_fetch_num($result);
    
    if ($max < $newtotal) {
        mysql_query("
            INSERT INTO table (`DATE`, `TOTAL`, `DBTOTAL`) 
            VALUES ('2012-03-09', '1', '$newtotal')
        ");
    }
    

    【讨论】:

      【解决方案2】:

      您可以通过基于SELECT 而不是提供VALUES 来进行条件插入。

      INSERT INTO mytable (`DATE`, `TOTAL`, `DBTOTAL`)
      SELECT '2012-03-09', '1', '$newtotal' FROM mytable
      WHERE MAX(`DBTOTAL`) < '$newtotal'
      

      【讨论】:

      • 那么你需要一个合适的列上的GROUP BY,这样你就只能得到一行。
      【解决方案3】:

      据我所知,WHERE 不能与 INSERT 一起使用。 if 条件应该可以解决问题:

      mysql_query("
          IF '$newtotal' > (SELECT MAX(`DBTOTAL`) FROM mytable)
          BEGIN
              INSERT INTO mytable (`DATE`, `TOTAL`, `DBTOTAL`) VALUES ('2012-03-09', '1', '$newtotal')
          END
      ");
      

      【讨论】:

        【解决方案4】:

        这样就可以了;

        INSERT INTO mytable 
          SELECT '2012-03-10', '1', 4051 FROM DUAL
          WHERE NOT EXISTS (
            SELECT * FROM mytable m WHERE m.dbtotal >= 4051
          );
        

        演示here.

        【讨论】:

          猜你喜欢
          • 2011-11-09
          • 1970-01-01
          • 2020-06-16
          • 2016-10-01
          • 1970-01-01
          • 2015-07-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多