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 の以前の値は null になります。

サブクエリがnullを返すかどうかにかかわらず、t_pointの値が同じままになるように、より具体的なコードを記述する方法は?

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 になります。COALESCE は、NULL でない場合は最初の値を返し、それ以外の場合は 2 番目の値を返します。

合体

ところで、変数をクエリに渡す前に、変数に 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 に答える