特定の条件が満たされた場合、テーブル(以下に表示)が新しい挿入を取得したときに行を自動的に削除したいと思います。
いつ:
- 同じ「user_id」を持つ同じ「フィールド」を参照する行があります
- それらの「フィールド」、「表示」、および「検索」列は同じです
単純に、行が重複する場合('group_id'列を除く)、null以外の'group_id'を削除する必要があります。そうでない場合は、行を更新または挿入する必要があります。
これをmysqlで設定する方法はありますか(「ONDUPLICATE do stuff」の精神で、一意のキーなどと組み合わせて)、またはphpで明示的にチェックする必要がありますか(複数のクエリを使用)?
追加情報:すべての可能な「フィールド」に対してNULLの「group_id」を含む行が常に存在する必要があります(他の場所で定義された限定されたセットがあります)。一方、null以外の'group_id'を持つものはない場合があります。
CREATE TABLE `Views` (
`user_id` SMALLINT(5) UNSIGNED NOT NULL,
`db` ENUM('db_a','db_b') NOT NULL COLLATE 'utf8_swedish_ci',
`field` VARCHAR(40) NOT NULL COLLATE 'utf8_swedish_ci',
`display` TINYINT(1) UNSIGNED NOT NULL,
`search` TINYINT(1) UNSIGNED NOT NULL,
`group_id` SMALLINT(6) UNSIGNED NULL DEFAULT NULL,
UNIQUE INDEX `user_id` (`field`, `db`, `user_id`),
INDEX `Views_ibfk_1` (`user_id`),
INDEX `group_id` (`group_id`),
CONSTRAINT `Views_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `User` (`id`) ON
UPDATE CASCADE ON DELETE CASCADE
)
COLLATE='utf8_swedish_ci'
ENGINE=InnoDB;