他の誰かが作成したプログラムから、貧弱なデータベース構造に対処しようとしていることに気づき、それに対処するためにクエリを作成しようとしています。既知の一意/主キーがない upsert クエリをシミュレートしようとしています...
DELIMITER //
IF ( ( SELECT COUNT( f_id ) FROM `wp_cformsdata` WHERE field_name='Agent First Name' AND sub_id='395' ) > 0 ) THEN
UPDATE `wp_cformsdata` SET field_val='Shane' WHERE field_name='Agent First Name' AND sub_id='395';
ELSE
INSERT INTO `wp_cformsdata` (sub_id, field_name, field_val) VALUES ( '395', 'Agent First Name', 'Shane' );
END IF;
DELIMITER ;
基本的に私のテーブルレイアウトは次のとおりです...
+------+--------+------------+-----------+
| f_id | sub_id | field_name | field_val |
+------+--------+------------+-----------+
このテーブルは、企業に関する個々のデータを格納するために使用されます。
'f_id' は、このテーブルで唯一のインデックス キー (プライマリ) です。それが値であるかどうか、またはデータを含むキーが存在するかどうかさえわかりません。
「sub_id」は、各会社のエントリに含まれる別のテーブルへの外部キーです。
'field_name' は、会社に関する情報の名前です (例: Company Name)
「field_val」はフィールドの実際の値です (例: Google Inc.)
これらのテーブルのデータを更新しようとしている、またはデータが存在しない場所に挿入しようとしています。このテーブルの性質上、どのフィールドにもインデックスを作成できません。上記の SQL を参照して、私が何をしているのかを確認してください。はい、少し肥大化しています。他に最適解があれば教えてください!
upsert クエリを試してみましたINSERT ... ON DUPLICATE KEY UPDATE
が、ここで作業するための一意のキーまたは主キーがないため、これは機能しません。