0
    $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 中的先前值变为空。

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

4

1 回答 1

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 返回第一个值,否则返回第二个值

合并

顺便说一句,在将变量传递给查询之前,请在它们上使用 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'");
于 2012-10-24T18:46:11.570 回答