私は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);