如果子查询返回空行,则使用子查询应用更新查询将插入零

时间:2012-10-24 18:38:13

标签: php mysql

    $query1="UPDATE admin   SET  t_points=t_points+ (SELECT points from sites where url='$url') where username='$login_session'";
mysql_query($query1);

如果子查询SELECT points from sites where url='$url'返回某些内容,则查询工作正常。 当它返回任何内容时,t_points中的先前值变为null。

如何编写更具体的代码,以便子查询返回null时t_point的值保持不变?

1 个答案:

答案 0 :(得分:0)

以下是结果查询:

UPDATE admin 
SET  t_points = t_points + COALESCE( 
    SELECT points 
    FROM sites 
    WHERE url = '$url', 
    0
) 
WHERE username = '$login_session'

每当你对NULL进行数学运算时结果总是为NULL,如果它不是NULL,则COALESCE返回第一个值,否则返回第二个值

COALESCE

顺便说一句,在将变量传递给查询之前,请对它们使用mysql_real_escape_string:

$url = mysql_real_escape_string($url);
$login_session = mysql_real_escape_string($login_session);

但我建议你使用MySQL PDO,你可以在这里找到一些文档PDO

为了提高性能,最好将UPDATE和SELECT查询分开(仅当SELECT查询对于每个更新查询都相同时才有效,就像在主题中一样) 我们可以将SELECT查询的结果传递给变量,并在UPDATE:

中使用此变量
mysql_query("SET @points = COALESCE(
                 SELECT points
                 FROM sites
                 WHERE url = '$url', 
                 0
             )");
mysql_query("UPDATE admin 
             SET t_points = t_points + @points 
             WHERE username = '$login_session'");