0

私はこのような挿入物を持っています(MySQLを使用)

INSERT INTO user_actions(action_id,user_id,action_type,record_id,on_table) VALUES
(
    action_id,
    '1',
    '1',
    '32',
    '1'
)
ON DUPLICATE KEY UPDATE 
user_id=user_id AND 
action_type = action_type AND 
record_id = record_id AND 
on_table = on_table

そしてaction_id_AUTO_INCREMENT

特定の値が異なる場合にのみ、テーブルに挿入する目的si。

私の間違いは何ですか?

そして第二に、私は選択でIF、ELSEを行うことができますか?お気に入り

var_count = count
(
    SELECT action_id FROM user_actions
    WHERE 
    action_id = 'value' AND
    user_id 'value' AND
    action_type 'value'
    record_id 'value' AND
    on_table 'value' AND
)

IF var_count = 0

    INSERT INTO user_actions(action_id,user_id,action_type,record_id,on_table) VALUES
    (
        action_id,
        '1',
        '1',
        '32',
        '1'
    )
    
ELSE

    ... echo error
    
END IF
4

1 に答える 1

1

,代わりに使用する必要がありますAND

ALTER IGNORE TABLE user_actions ADD UNIQUE KEY ix1(user_id,action_type,record_id,on_table);

ここを参照してください

INSERT INTO user_actions(action_id,user_id,action_type,record_id,on_table) VALUES
(
 action_id,
 '1',
 '1',
 '32',
 '1'
)
ON DUPLICATE KEY UPDATE 
user_id=user_id,
action_type = action_type,
record_id = record_id,
on_table = on_table;

他のSELECTメソッドの場合、ストアドプロシージャ内にこれらのステートメントを記述する必要があります。

CREATE PROCEDURE sp_check_user_actions(arg_action_id INT)
BEGIN
    SELECT count(1)
    INTO @var_count
    FROM user_actions
    WHERE
    action_id = arg_action_id AND
    user_id 'value' AND
    action_type 'value'
    record_id 'value' AND
    on_table 'value';

    IF(@var_count = 0)
    THEN

        INSERT INTO user_actions(action_id,user_id,action_type,record_id,on_table) VALUES
        (
            arg_action_id,
            '1',
            '1',
            '32',
            '1'
        );
    ELSE
        SELECT "Error: Duplicate user action" As error_message;
    END IF;
END;
于 2012-08-02T10:10:04.793 に答える