我是 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/