我有两个表:

people:
peopleID (PK)
name

peopleaddress:
addressID (PK)
peopleID (fK)
address
addresstype
...other fields...


一个人可以有更多地址。
我有一个添加新人(和地址)的表单,还有一个用于编辑信息的表单。当我加载编辑表单时,它将从数据库中获取有关该人的信息,并将其放在value =“”字段中。

现在,当我提交编辑表单时,我使用2条sql命令:

$stmt = $conn->prepare("DELETE from peopleaddress WHERE peopleID=?");




$stmt = $conn->prepare("INSERT INTO peopleaddress (peopleID, addresstype, active, street.....) VALUES (?, ?, ?, ....)");


它运作良好,唯一的缺点是addressID每次更新都会更改,并且往往会快速增长。
我是用正确的方式来做还是在php或更好的sql中有一种说法:

如果存在新地址»更新

如果不存在»插入

如果现有地址的所有字段为空»删除

谢谢你的帮助!

最佳答案

您正在寻找的是:“ INSERT ... ON DUPLICATE KEY UPDATE

INSERT INTO peopleaddress (peopleID, addresstype, active, ...) VALUES (1,2,3, ...)
  ON DUPLICATE KEY UPDATE addresstype=2, active=3, ...;


如果该地址已经存在于数据库中,它将找到该地址,如果可以的话,将对其进行更新。否则,它将插入。

您可能需要重新制作“?”替换。

09-07 18:56