如果不使用唯一 ID,我想插入一条记录,我在这里找到了这个答案:MySQL: Insert record if not exists in table。
就我而言,我有一张桌子:
+----+---------+---------+---------+---------+-----------+-------------+-----------+
| ID | dRelIns | vRelIns | dRelDel | vRelDel | cRelAktiv | iRelDateiId | iRelKatId |
+----+---------+---------+---------+---------+-----------+-------------+-----------+
| 1 | blabla | blabla | NULL | NULL | J | 3 | 5 |
+----+---------+---------+---------+---------+-----------+-------------+-----------+
| 2 | blabla | blabla | blabla | blabla | N | 3 | 1 |
+----+---------+---------+---------+---------+-----------+-------------+-----------+
| 3 | blabla | blabla | NULL | NULL | J | 3 | 2 |
+----+---------+---------+---------+---------+-----------+-------------+-----------+
我得到一个 ID 为 iRelKatId 的数组 ($_POST)和另一个 ID为iRelDateiId的数组。我检查 id 是否已经存在并且 cRelAktiv = 'J',如果不存在,我想插入一个新的。如果某些条目存在但不在列表中,我想将 cRelAktiv 设置为“N”。
我的带有 SQL 查询的 PHP 脚本:
$list=implode("','", $_POST["kat"]);
$sql="UPDATE tabRel_UDK SET dRelDel=NOW(),
vRelDel=USER(),
cRelAktiv='N'
WHERE iRelDateiId='$_POST[id]' AND cRelAktiv='J' AND iRelKatId NOT IN('$list')";
$result = mysql_query($sql) or die(Error (" . mysql_error() . ").");
foreach ($_POST["kat"] as $value) {
$sql="INSERT INTO tabRel_UDK (dRelIns, vRelIns, cRelAktiv, iRelDateiId, iRelKatId)
SELECT * FROM (SELECT NOW(), USER(), 'J', '$_POST[id]','$value') AS tmp
WHERE NOT EXISTS (
SELECT iRelDateiId,iRelKatId,cRelAktiv FROM tabRel_UDK
WHERE iRelDateiId = '$_POST[id]' AND iRelKatId='$value' AND cRelAktiv='J') LIMIT 1;";
$result = mysql_query($sql) or die("Error (" . mysql_error() . ").");
}
这个脚本对我有用,但是当两个 id 具有相同的值(例如 5)时,它会抛出一个错误Duplicate column name '5'因为SELECT * FROM (SELECT NOW(), USER(), 'J', '$_POST[id]','$value')
任何想法如何使其工作,或者我应该进行 2-3 个 SQL 查询并在 PHP 中手动检查 id?