INSERT / UPDATEに関するスレッドがたくさんあることは知っていますが、問題の解決策が見つかりませんでした。
オプションを管理するための2つのテーブルがあります。
# table 1: option_fields
id | label | type | default
# table 2: option_values
id | field_id | user_id | value
注:field_idとuser_idは外部キーである必要がありますが、そうではありません。
エントリが存在しない場合は、option_valuesに挿入したいと思います。疑似コード:
IF (field_id != 1 AND user_id != 2):
INSERT
INTO option_values (field_id, user_id, value)
VALUES (1, 2, "text")
ELSE:
UPDATE option_values
SET value = "text"
WHERE field_id = 1 AND user_id = 2
ENDIF;
私が知っている方法:
#1:ON DUPLICATE KEY 主キーは「id」のみであるため、機能しません
#2:REPLACE REPLACE は汚い方法だと思うので、使用したくありません(主キーは、誰かがオプションを変更するたびにカウントアップされます)。
#3:MySQL IF、THEN パフォーマンスを使いすぎて、同様に汚れているようです。
どのようなソリューションを選択しますか、またその理由は何ですか?#1が一番いいと思いますが、使えません。
前もって感謝します!