php - MySQL 多对多具有唯一键和更新/选择如果存在否则插入

标签 php mysql many-to-many select-insert

我的目标是在我的 MySQL 数据库中建立多对多关系,我已经到达了另一个需要构建的桥梁。

当前表:
用户 (id, name)
标签(id、名称)
User_Tags (user_id, tag_id)

目标如下:
我希望能够获取标签,即:#fb 并将其插入到我的 Tags 数据库中,该数据库对 name 具有唯一约束如果标签存在,我想返回它的 id

我想将 tag.id 和当前用户的 user.id 插入到 User_Tags 中。我对 User_Tags 表没有任何唯一约束,因为我希望能够跟踪用户最常用的标签,并将它们显示在按使用频率排序的列表中。

我目前正在使用准备好的语句在 PHP 中开发这个项目。
此外,性能目前不是问题,因为我的用户数量仍然很少,但它正在稳步增长,将来可能会成为问题。

最佳答案

您可以使用 MySQL 的 ON DUPLICATE KEY UPDATELAST_INSERT_ID(expr)获取标签 ID,无论它是否已插入或已经存在,例如

INSERT INTO
  Tags
  (name) 
VALUES
  (:name)
ON DUPLICATE KEY UPDATE
  id = LAST_INSERT_ID(id)

INSERT INTO
  User_Tags
  (user_id, tag_id)
VALUES
  (:userid, LAST_INSERT_ID())

关于php - MySQL 多对多具有唯一键和更新/选择如果存在否则插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2796609/

相关文章:

mysql - 如何按天、月、年选择数据库行

php - Ansible mysql_user 模块不接受加密密码

c# - EF Core - 类中的多对多关系

php - 是否有必要显式地通过引用传递?

javascript - 将 MySQL 查询结果传递给 JavaScript 函数

mysql - 如何在mysql触发器中按条件跳过行?

mysql - 如何有效地查询两列上的多对多关系

javascript - 表单的 Jquery 表单验证

PHP将字符串分解成碎片然后插入到mysql中

java - Odoo 请求中的 Many2Many 字段插入在 Android 中不起作用