1

インスタンスがまだ存在しない場合に更新する必要があるテーブルが MySQL データベースにあります。私は次の方法を試しましたが、解決策に近づいていません:

SET @last_message_id = (
SELECT id FROM mailbox_last_message WHERE conversationId = '13'
);

BEGIN TRANSACTION;
UPDATE mailbox_last_message SET conversationId = '13', initiatorMessageId = '20', interlocutorMessageId = '10' 
WHERE id = @last_message_id 
IF (@@ROWCOUNT = 0)
INSERT INTO  mailbox_last_message (  id ,  conversationId ,  initiatorMessageId ,  interlocutorMessageId ) 
VALUES ('' , '13', '20', '0' );
COMMIT;

そしてこれ:

 SET @last_message_id = (
 SELECT `id` FROM mailbox_last_message WHERE `conversationId` = 13);

 INSERT INTO  mailbox_last_message (  id ,  conversationId ,  initiatorMessageId ,  interlocutorMessageId ) 
 VALUES ( '', '13', '20', '0' ) ON DUPLICATE 
 KEY UPDATE id = @last_message_id

このソリューションは、conversationId 13 で新しいインスタンスを作成しますが、これは私が望んでいるものではありません。ドキュメントとさまざまなチュートリアル/例をオンラインで検索しようとしましたが、適切な解決策が見つかりません。どんな助けでも大歓迎です。

4

1 に答える 1

2

一意に保ちたいフィールドに一意のインデックスがある場合は、INSERT IGNORE INTO 構文を使用できます。

    SET @last_message_id = (
SELECT id FROM mailbox_last_message WHERE conversationId = '13'
);

    INSERT IGNORE INTO  mailbox_last_message (  id ,  conversationId ,  initiatorMessageId ,  interlocutorMessageId ) 
    VALUES ('' , '13', '20', '0' ) ON DUPLICATE KEY UPDATE id = @last_message_id;
于 2013-10-04T16:01:40.140 に答える