【问题标题】:MySQL: INSERT and SELECT in same queryMySQL:在同一个查询中插入和选择
【发布时间】:2011-10-22 16:47:18
【问题描述】:

我有棘手的SQL 查询要创建,如果可能的话,这将为我节省大量 PHP 代码。

所以我有一个 HTML 表单,访问者可以在其中创建一个用户帐户,其中包含 nameemailpassword 字段兴趣

对于 nameemailpassword,我有一个简单的 INSERT 查询来将此信息输入数据库 users,但是 interests 字段可以有多个条目,因此这些数据存储在多对多连接表中(interestsuser_interests)。

为了让我在 user_interests 表中输入这些兴趣,我需要获取用户 ID 号,它是从初始 INSERT 查询自动递增的,并为每个“兴趣”用户已选择。我可以在一个 SQL 查询中完成这一切吗?

【问题讨论】:

  • 您必须使用 2 个查询或一个事务。 LAST_INSERT_ID() 将很有用:dev.mysql.com/doc/refman/5.1/en/…
  • 可能是的,使用 INSERT INTO (cols. . .) SELECT cols. . .从 。 . .,但是当您要执行此 SQL 时,您需要说明哪些信息在哪些表中。

标签: mysql select insert


【解决方案1】:

如果你想用一个命令来做这件事,那么学习如何编写 MySql 存储过程听起来是个不错的案例。结果也会快得多。

http://dev.mysql.com/doc/refman/5.0/en/stored-routines-last-insert-id.html

http://dev.mysql.com/doc/refman/5.0/en/sql-syntax-compound-statements.html

【讨论】:

  • 您打算如何将 ID 列表传递给存储过程?也许我遗漏了一些东西,但我在 MySQL 手册中找不到任何类似数组的数据类型。
  • 我会将它作为逗号分隔的列表传递,然后解析出数据并构建一个包含多行的单个插入语句。肯定有 MySql 函数可以轻松做到这一点。学习如何编写 SP 是编程中最有价值的技能之一,因为它们在所有语言中都是通用的(您只需使用参数调用它们)
【解决方案2】:

嗯,在 MySQL 中,INSERT 语句只插入到一个表中。所以不,不可能用一个查询来完成这个。但是你可以用两个查询来做到这一点。 MySQL 支持一种语法,您可以使用单个查询插入多行:

insert into user_interests (user_id, interest_id) values (1,1), (1,2), (1,3)

附:我确实正确理解兴趣是一个分类器,向interests 表添加新行超出了这个问题的范围,对吧?

【讨论】:

猜你喜欢
  • 2012-04-12
  • 1970-01-01
  • 1970-01-01
  • 2013-11-20
  • 2013-11-23
  • 1970-01-01
  • 2018-03-27
  • 2015-12-28
  • 1970-01-01
相关资源
最近更新 更多