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

时间:2015-01-20 20:38:47

标签: php mysql

我是MySQL的新手,我正在尝试执行以下操作,并希望我可以使用单个PHP查询来调用MySQL,而不必调用,存储在php,调用,存储在php等。

这是我的数据库设置。 1.用户表,包括电子邮件地址。 2.被邀请者的表格'通过电子邮件地址和邀请被邀请者的用户3.朋友的表格

我想加入用户表和被邀请者表,以确定哪些被邀请者已注册为用户以及谁邀请他们(请记住,他们可能已被超过一人邀请)。从那里我将把新注册的被邀请者和邀请他的人插入到朋友表中。最后,我将从受邀表中删除该被邀请者,以便他不会继续收到邀请。

我看到如何通过3个单独的php调用mysql来执行此操作:1。一个JOIN,用于查找用户表和被邀请者表中的用户(该联接还将识别谁邀请他们)2。INSERT到将该对放入friends表3.删除将该用户从被邀请者列表中删除。

但是对于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脚本,我只需要存储所有结果然后自己调用第二个。有没有办法在一个电话中执行此操作?如果是这样,那么有没有办法在删除语句(来自invite2 WHERE invitee = users.email后删除)后呢?

任何建议都将不胜感激。提前谢谢。

1 个答案:

答案 0 :(得分:0)

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更有意义。