$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的值保持不变?
答案 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返回第一个值,否则返回第二个值
顺便说一句,在将变量传递给查询之前,请对它们使用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'");