0

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が一番いいと思いますが、使えません。

前もって感謝します!

4

1 に答える 1

1

id主要な(そして唯一の一意の)キーですが、一意のキーの役割field_idとの組み合わせを確実に使用します。user_id

(field_id, user_id)これは、最もクリーンな解決策は、一意のキーを作成して続行することであることを示唆していますON DUPLICATE KEY UPDATE

于 2012-11-26T23:13:11.943 に答える