簡體   English   中英

如果子查詢返回空行,則將更新查詢與子查詢一起應用將插入零

[英]applying Update query with subquery is inserting zero if subquery returns null row

    $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'返回內容的SELECT points from sites where url='$url'則查詢工作正常。 當它不返回任何內容時,t_points中的先前值將為空。

子查詢返回null時,如何編寫更具體的代碼,以便t_point的值保持不變?

這是結果查詢:

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

每當對NULL進行數學運算時,結果始終為NULL,如果COALESCE不為NULL,則返回第一個值,否則返回第二個值

合並

順便說一句,在將變量傳遞給查詢之前,請在它們上使用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'");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM