【问题标题】:Check if a record exists and return its ID if it was found or created? [duplicate]检查记录是否存在,如果找到或创建,则返回其 ID? [复制]
【发布时间】:2013-01-27 20:53:30
【问题描述】:

可能重复:
Normalized DB insertions

是否可以执行单个查询来查找记录并返回它的 ID 或插入它并返回它的 ID?以下是我认为可能适用的方法:

INSERT INTO firstname (id, name) VALUES (NULL,'$name') 
ON DUPLICATE KEY UPDATE name ='$name', id=LAST_INSERT_ID(id)

如果有帮助,我正在使用 ezSQL,可以先执行 $db->query("...");,然后执行 $id = $db->insert_id; 来获取插入 ID 并在变量中使用它。

【问题讨论】:

  • 当用户两次问同一个问题时,我总是投反对票 - 但从来不知道为什么会发生这种情况!
  • 主要是因为第一个半小时没有回复,已经过了首页,然后我发了这个,8分钟就收到回复了。

标签: php mysql insert ezsql


【解决方案1】:

您可以编写自己的存储过程来检查现有记录。

  1. 尝试按 id 检索记录
  2. 检查是否为空,插入
  3. 否则你得到了行

【讨论】:

  • 目前,我让它选择数据库中的所有项目并将它们放入一个数组中,然后执行 array_search 以确定数组中是否存在某些内容。我试图避免这种情况,因为现在数据库中有超过 1500 万条记录,并且该部分脚本使用了大量内存,并且可能有 20 个该脚本的实例同时运行,这完全填满了系统。
  • 这就是我告诉你写存储过程的原因
  • 你不需要这样做,按照上面的说明,发出一个SELECT语句来查看该行是否存在,如果它没有返回行做一个INSERT,你的问题中的SQL应该被抛出。
  • 非常感谢@on_,它工作得非常好,正是我想要的。
【解决方案2】:

我不确定我是否了解您需要什么。

在调用 INSERT INTO ... ON DUPLICATE KEY UPDATE ...之后,您只需要从数据库中获取 last_insert_id() 就可以了。

【讨论】:

  • 知道了。我想我对这个查询的作用感到困惑。如果它正在更新旧记录的 ID,那不会弄乱引用旧 ID 的任何其他表吗?
猜你喜欢
  • 2016-01-18
  • 1970-01-01
  • 2012-10-09
  • 2019-11-27
  • 2013-12-27
  • 2011-05-12
  • 1970-01-01
相关资源
最近更新 更多