mysql选择从一个特定行插入两个值,再从一些随机行插入两个值(配对)

时间:2015-01-28 03:59:14

标签: mysql

这个问题Mysql Select some random rows and plus one specific row非常接近我想要的,除了我不知道如何将ORDER BY应用于我的情况。

当有人接受加入我网站的邀请时,我想将该被邀请者添加到“朋友”中。列表连接到他们的邀请者,但我也想添加1或2个随机被邀请者,让他们开始发展网络。以下是添加被邀请者的工作原因:

INSERT INTO friends (user, friend) VALUES (SELECT users.user as user1, invited.user as user2 FROM users INNER JOIN invited ON users.email=invited.invitee

我选择邀请人的用户名加上被邀请的人然后加入并将其插入到朋友表中。到目前为止对邀请者有好处,但我如何添加随机朋友?是否有办法在此语句中添加1或2个来自users表的随机用户名?

我真的想插入以下内容(其中user1始终是同一个人):

(user1,内部联接发现的朋友) (user1,rand用户) (user1,另一个rand用户)

这是我想做的但不起作用的事情:

INSERT INTO friends (user, friend) VALUES (SELECT users.user as user1, invited.user as user2 FROM users INNER JOIN invited ON users.email=invited.invitee), (user1, SELECT user FROM users ORDER BY RAND() LIMIT 1),  (user1, SELECT user FROM users ORDER BY RAND() LIMIT 1);

但这只是让我得到以下不是非常有用的错误:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT users.user as user1, invited.user as user2 FROM users INNER JOIN invited ' at line 1

使用单个函数调用还有另一种方法吗?或者如果没有,用预处理语句执行此操作的最有效方法是什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

我觉得你很亲密。

在这种情况下,您可以使用简单的variable assignmentUNION子句,而不是陷入联接(除了您需要的第一个)和子查询之外。导致问题的唯一缺失是您需要使用INSERT INTO...SELECT语法与INSERT INTO...VALUES语法(Reference)。

INSERT INTO friends (user, friend) 
SELECT @user1:=users.user as user1, invited.user as user2 
    FROM users 
    INNER JOIN invited 
    ON users.email=invited.invitee
    WHERE invited.invitee = 'baz@bar.com'
UNION ALL
(SELECT @user1 as user1, user 
FROM users 
ORDER BY RAND() LIMIT 2)