分配表INSERT INTO防止重复

时间:2019-01-02 14:45:19

标签: php mysql

我想为我的PHP函数创建一个语句,其中有一个UserID和一个InteressenID,并根据用户检查的内容更新我的userinteressen表。我不希望该表重复。

我在文档中找到了INSERT ... ON DUPLICATE KEY UPDATE,但是,由于表中没有设置UNIQUE行,因此无法正常工作。 由于要使用MySQL,因此没有MERGE语句。 由于我从PHP函数中收到了InteressenID,所以不需要JOIN。我尝试INSERT IGNORE描述了here,但返回了错误#1064 对于删除,我正在考虑先将InteressenID设置为0,然后再将其删除。

表格:

用户

ID | Name
---+--------
1  | "Agathe"
2  | "Bernd"
3  | "Charlie"

Interessen

ID | Name
---+------------
1  | "Cars"
2  | "Sport"
3  | "Languages"

userinteressen

User | Interessen
-----+-----------
1    | 2
1    | 3
2    | 2

我不工作的尝试:

INSERT INTO userinteressen VALUES('$id','$interesse')
SELECT *
WHERE userinteressen.User IS NULL AND userinteressen.Interesse IS NULL;

INSERT IGNORE INTO `userinteressen`
SET `User`= 1
`Interesse`= 2;

更多信息: 我正在使用PDO。 通过使用phpmyadmin的界面创建了userinteressen-table,因此我对数据库的外观一无所知。

我导出数据库以获取一些见解。我是数据库的新手,并且大多具有理论知识。这是引擎创建的语句:

--
-- Indices for Tabelle `userinteressen`
--
ALTER TABLE `userinteressen`
  ADD KEY `User` (`User`,`Interesse`),
  ADD KEY `Interesse` (`Interesse`);

--
-- Constraints of table `userinteressen`
--
ALTER TABLE `userinteressen`
  ADD CONSTRAINT `userinteressen_ibfk_1` FOREIGN KEY (`User`) REFERENCES `user` (`UserID`),
  ADD CONSTRAINT `userinteressen_ibfk_2` FOREIGN KEY (`Interesse`) REFERENCES `interessen` (`InteressenID`);

COMMIT;

谢谢!

1 个答案:

答案 0 :(得分:1)

mysql替换:

您的junction table User中的Interesseuserinteressencomposite PRIMARY KEY吗?然后,您可以使用mysql REPLACE代替INSERT:

REPLACE INTO `userinteressen`
SET `User`= 1
`Interesse`= 2;
  

REPLACE的工作方式与INSERT完全相同,不同之处在于,如果   表具有与PRIMARY KEY或UNIQUE的新行相同的值   索引,则在插入新行之前删除旧行。看到   第13.2.6节“ INSERT语法”。

但是没有针对未经检查的“ interesse”的解决方案。因此,当用户取消选中一个或多个选项时,您需要删除userinteressen中的关系。

要删除的示例:

DELETE FROM `userinteressen` WHERE `Interesse` NOT IN (1,2,3) AND `User` = 1;

用选定的Interesse ID替换(1,2,3)

在插入之前删除所有关系:

您还可以删除所有关系(元组)并再次插入当前选定的关系。这还允许用户取消选中“ interesse”及其删除的内容:

// ...
DELETE FROM `userinteressen` WHERE `User` = 1
// ...
foreach($selectedInteressen as $id) {
    // ...
    INSERT INTO `userinteressen`
    SET `User`= 1
    `Interesse`= $id;
    // ...
}

注意:我不知道您使用的是哪个接口(PDO,mysqli,...?),所以我简化了示例