0

我使用此查询来插入记录并防止为积雪深度插入 0。我使用 NULL 但这是最​​好的方法吗?

if ($snow_mountain==0) {$snow_mountain=null;}
if ($snow_valley_min==0) {$snow_valley_min=null;}
if ($snow_valley_max==0) {$snow_valley_max=null;}

        $rQuery13 = "UPDATE sv_snow 
SET snow_valley_min=$snow_valley_min, snow_valley_max=$snow_valley_max,snow_mountain=$snow_mountain, templo='$templo', temphi='$temphi', lifts_open='$lifts', ski_id=$ski_id 
WHERE res_id=$res_id AND lud='$today'";

      echo $rQuery13;
    $rResult13 = mysql_query($rQuery13);
4

3 回答 3

1

这完全取决于列的数据类型,如果您定义为int,那么它的默认值是0并且定义为varcharwith null,那么它的默认值是null

                $rQuery13 = "UPDATE sv_snowalert
                SET snow_valley_min='".$snow_valley_min."', snow_valley_max='".$snow_valley_max."',snow_mountain='".$snow_mountain."', templo='".$templo."', temphi='".$temphi."', lifts_open='".$lifts."', ski_id='".$ski_id."'
                WHERE res_id='".$res_id."' AND lud='".$today."' ";

                echo $rQuery13;
                $rResult13 = mysql_query($rQuery13);
于 2013-11-09T12:18:08.887 回答
1

更好的方法是避免使用NULLand 而不是NULL考虑一些你永远不会期望它具有的价值。大多数情况下,我最终使用的是负值。

但由于某种原因,如果你必须使用NULL,首先将列更改为允许NULL,例如:

ALTER TABLE  `sv_snowalert`
      CHANGE `snow_valley_min`
             `snow_valley_min` INT( 11 ) NULL DEFAULT NULL ;

然后你可以插入 NULL 值,例如:

INSERT INTO `sv_snowalert` ( `snow_valley_min` ) VALUES ( NULL );

您也可以在 UPDATE 查询中使用IF( )函数:

$snow_mountain = 0;             // For test
$res_id = 1;                        // For test
$today = '2013-11-11 00:00:00'; // For test

$rQuery13 = "
UPDATE
    sv_snow
SET
    snow_mountain
        = IF( '" .$snow_mountain ."' = '0' ,NULL ,'" .$snow_mountain ."' )
WHERE
        res_id = '" .$res_id ."'
    AND lud = '" .$today ."'";

echo $rQuery13;
于 2013-11-09T12:39:44.487 回答
0

您始终可以在数据库设置中使用 set null 作为默认值,并且不为这 3 个指定任何属性。

但是 null 有时会很混乱,我通常给 -1 或 false 或 -1000 一些非常具体的东西。

于 2013-11-09T12:14:55.380 回答