0

次のような友情を保存するテーブルがあります。

Friend : f_id , f_userid1 , f_userid2 , f_status .

ユーザー a がユーザー b と友達の場合、1 行だけ挿入します。

 f_userid1 = a  , f_userid2 = b

この友情の行があるかどうかを確認したいので、ステータスをゼロに変更します。そのための手順を作成しました。

    BEGIN                                      
        DECLARE fid INT(15);

        -- check for first one 
        SELECT f_id INTO fid FROM f WHERE
        f_userid1 = @userid1
        AND f_userid2 = @userid2;

SET oup = 1;

        IF(fid = 0) THEN

SET oup = 2;
            -- check for SECOUND one 
            SELECT f_id INTO fid FROM f WHERE f_userid2 = @userid1 AND f_userid1 = @userid2;

        END IF;

            -- if statment


        IF(fid > 0) THEN

SET oup = 3;
            -- we need to update the exiting request
            UPDATE f SET f_userid1 = @userid1 , f_userid2 = @userid2 , f_status = 0 WHERE f_id = @fid ;

        END IF;

    END

私は前にここのような列を持っています

f_id = 1 , f_userid1 = a . f_userid2 = b , f_status = 1;

正常に実行されますが、影響を受ける行はありません。

出力を追加しましたが、 1 しか返されません。

私の問題はどこですか?

4

1 に答える 1

0

単一のクエリで記述しないのはなぜですか?

UPDATE f
SET f_status = 0
WHERE ( f_userid1 = @userid1 AND f_userid2 = @userid2 )
   OR ( f_userid1 = @userid2 AND f_userid2 = @userid1 );
于 2013-01-12T07:59:28.257 に答える