PHP/MySQL 有 SELECT...INSERT 和/或 SELECT...INSERT...DELETE

标签 php mysql

我是 MySQL 新手,我正在尝试执行以下操作,并希望我可以通过对 MySQL 调用的单个 PHP 查询来完成这一切,而不必调用、存储在 php 中、调用、存储在 php 等中.

这是我的数据库设置。 1. 用户表,包括电子邮件地址。 2. 按电子邮件地址和邀请受邀者的用户列出的“受邀者”表 3. “ friend ”表

我想将用户表与受邀者表结合起来,以确定哪些受邀者已注册为用户以及谁邀请了他们(请记住,他们可能受到超过 1 人的邀请)。从那里,我会将新注册的受邀者以及邀请他的人插入 friend 表中。最后我会从受邀表中删除该受邀者,这样他就不会继续收到邀请。

我看到如何通过对 mysql 的 3 个单独的 php 调用来做到这一点: 1. 一个 JOIN 来查找用户表和受邀者表中的用户(该连接还将识别谁邀请了他们) 2. 一个 INSERT 到将这对放入好友表中 3. DELETE 将用户从受邀者列表中删除。

但是,由于多次调用 MySQL 服务器,并且我的 php 脚本存储了我真正只需要下一个 MySQL 调用所需的大量数据,这将带来更高的流量/更少的优化。我有一种感觉,只需 1 次调用就可以实现这一点,并且不会将任何数据返回到 php 脚本。

我看到有一个 INSERT...SELECT MySQL 调用 ( http://dev.mysql.com/doc/refman/5.0/en/insert-select.html ),但我无法找到一种方法来组合上面的步骤 1 和 2,这将是一个 SELECT...INSERT 选项。这存在吗?我尝试了以下方法,但没有成功...这样的东西是我的理想。

SELECT users.user as user1, invited2.user as user2, invited2.email as email2 FROM users RIGHT JOIN invited2 ON users.email=invited2.invitee; 
INSERT INTO friends (user, friend) VALUES (user1, user2), (user2, user1);  
DELETE FROM invited2 WHERE invited2.email = email2; 

INSERT INTO 之前的部分可以独立工作,但就像我说的,如果我只是将其返回到我的 php 脚本,我只需存储所有结果,然后自己调用第二个结果。有没有一种方法可以在一次通话中完成此操作?如果是这样,有没有办法在之后添加删除语句(从 Invited2 WHERE Invitede=users.email 中删除)?

如有任何建议,我们将不胜感激。提前致谢。

最佳答案

MySQL 确实提供了 INSERT...SELECT ( http://dev.mysql.com/doc/refman/5.1/en/insert-select.html )

您的 SQL 可以编辑为:

INSERT INTO friends (user, friend)
SELECT users.user as user1, invited2.user as user2
FROM users
RIGHT JOIN invited2 ON users.email=invited2.invitee;

DELETE invited2
FROM users
RIGHT JOIN invited2 ON users.email=invited2.invitee;

在这种情况下,INNER JOIN 似乎比 RIGHT JOIN 更有意义。

关于PHP/MySQL 有 SELECT...INSERT 和/或 SELECT...INSERT...DELETE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28054716/

相关文章:

php - 如何将json转换为php数组并在其上使用foreach?

php - 有条件加入 Doctrine ?

mysql - 如何使用查询更新数据库中的数据而不改变原始值?

在这种情况下MySQL的大小是多少?

php - Apache Benchmark - 并发和请求数

javascript - 如何根据游戏数量显示一个div

php - 使用 PHP 更新外键值

php - 数据库错误未插入值 phpMyAdmin

php-fpm 未加载与 php-cli 相同的扩展

php - 如何生成新的 GUID?