0

この SQL を次のように変更するにはどうすればよいですか。

  1. ユーザーがテーブルにない場合は、追加します。[この部分は機能します]
  2. ユーザーが表にあり、かつfavourite_active = 0に変更する場合favourite_active = 1
  3. ユーザーがテーブルfavourite_active = 1にいて、それを に変更する場合favourite_active = 0

WHERE 句を追加する必要があると思います。

$result = mysql_query("SELECT * FROM tbl_favourites WHERE (user_id = '$who' AND favourite_id = '$usernum' AND favourite_active = '1')");

// if user does not exist in favourites, add them
    if(mysql_num_rows($result) == 0) 
    {
         mysql_query("INSERT INTO tbl_favourites (user_id, favourite_id, favourite_active) VALUES ('$who', '$usernum', '1')");
        echo"You have added this user as a favourite";
    } 

// if user does exist and favourite_active = 1 change to 0
    else {
        mysql_query("UPDATE tbl_favourites SET favourite_active='0' WHERE user_id='$who' AND favourite_id='$usernum'"); 
        echo"You have removed this user as a favourite";
    }

// if user does NOT exist and favourite_active = 0 change to 1
    else {
        mysql_query("UPDATE tbl_favourites SET favourite_active='1' WHERE user_id='$who' AND favourite_id='$usernum'"); 
        echo"You have removed this user as a favourite";
    }
4

1 に答える 1

1

elseIF に 2 つの句を含めることはできません。UPDATEまた、2 番目のクエリは最初のクエリを元に戻すだけなので、2 つの別々のクエリで実行することはできません。次のクエリを使用します。

UPDATE tbl_favourites SET favourite_active = NOT favourite_active WHERE user_id = '$who' and `favourite_id = '$usernum'

また、あなたが言っている最初の部分が本当にうまくいくかどうかもわかりません。あなたのSELECTクエリは特に を探しますfavourite_active = 1。ユーザーが に既に存在する場合は、そのユーザーfavourite_active = 0にアクセスしようとしINSERTます。それは本当にあなたが望むものですか?削除する必要があるかもしれませんAND favourite_active = '1'

user_idテーブルに一意のインデックスを形成する場合favourite_id、単一のクエリですべてを実行できます。

INSERT INTO tbl_favourites (user_id, favourite_id, favourite_active)
VALUES ('$who', '$usernum', '1')
ON DUPLICATE KEY UPDATE favourite_active = NOT favourite_active
于 2013-09-02T11:33:48.137 に答える