どのように私は更新しない場合、MySQLに存在し、他のインサート

ジェームズOduro:

私はPRIMARY_KEYとして定義されAUTO_INCREMENTフィールドを持つテーブルを持っています。

vote_id、vote_user_id、vote_ask_id、vote_comment_id、vote_post_id、vote_type、vote_status:私のような列を持っています

私は新しいレコードを挿入したいが、私は私がINSERTをする新しいデータと同じように、列(vote_user_id、vote_ask_id、vote_type)を持つ行があるかどうかを確認したいことをやる前に。

CONDITIONS:
IF ROW EXISTS
THEN UPDATE tableName SET vote_status=new_value, vote_time=new_time
ELSE
INSERT NEW RECORDS

私は、インターネットを検索し、MySQLの..ON DUPLICATE KEY UPDATEについて学んできました。私はこの文は、それ以来、DUPLICATE KEY(... PRIMARY_KEYまたはUNIQUE FIELD)についてのみチェックし、私の仕事に役立つことはありません実現しています。私はINTOをREPLACEのMySQLにも学んだ...そしてそれはまた、PRIMARY_KEYまたはUNIQUEインデックスにバインドされているので、同様に、これは私の問題に役立つことはありません。

私は...文を使用して....私はMERGEを使用することができます学んだが、私はそれについて続きを読むと、私はSQLサーバー(マイクロソフト)の唯一の仕事それをrelisedので、これは私にエラーを与えていました

最高の缶誰かの助けが私はこれをどのように解決してください?

私は、MERGEのstamentsでこれを試してみました:

MERGE {$votes_table} WITH (HOLDLOCK) AS VT
    USING ({$Qid},{$vote_type},{$CUid},{$vote_status}) AS VTS (vote_ask_id,vote_type,vote_user_id,vote_status)
    ON( VT.vote_ask_id = VTS.vote_ask_id AND VT.vote_user_id=VTS.vote_user_id AND VT.vote_type=VTS.vote_type)
    WHEN MATCHED THEN 
    UPDATE SET VT.status=VST.vote_status , VT.vote_time='{$current_time}' WHERE VT.vote_user_id=VTS.vote_user_id AND VT.vote_ask_id=VTS.vote_ask_id AND VT.vote_type=VTS.vote_type

    WHEN NOT MATCHED THEN INSERT (vote_ask_id,vote_type,vote_status,vote_user_id,vote_time) VALUES('{$Qid}','{$vote_type}','{$vote_up_status}','{$CUid}','{$current_time}')
ゴードン・リノフ:

MySQLでは、使用ON DUPLICATE KEY

INSERT INTO tablename (vote_user_id, vote_ask_id, vote_type, . . . )
    VALUES (new_vote_user_id, new_vote_ask_id, new_vote_type . . . )
    ON DUPLICATE KEY UPDATE vote_status = VALUES(vote_status), vote_time = VALUES(vote_time);

このために仕事に、あなたはユニークな行を定義する列に一意索引/制約が必要になります。

CREATE UNIQUE INDEX unq_tablename_3 ON tablename(vote_user_id, vote_ask_id, vote_type);

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=27583&siteId=1