从mysql获取随机的朋友

时间:2013-11-18 11:51:30

标签: php mysql

其中有2个mysql表用户(id,name,city)和friend_list(id,userid,friend,status)。

现在我需要从friend_list表中获取三个随机朋友,并从users表中获取他们的名字。

Friend_list table
id |  userid  |friend |status
1  |    1     |   2   | friends
2  |    3     |   1   | friends
3  |    2     |   3   | friends

users table:
id  |  name
1   | xxx
2   | yyy
3   | zzz

我需要查询这样的内容。

SELECT f.*,u.name FROM friend_list f,users u WHERE (f.userid = 1 or f.friend = 1) AND f.status = 'friends' AND f.userid = u.id AND f.order by RAND() limit 3 

但是对于例如:它应该在userid列中选择1,也从friend列中选择。

我试图在不使用JOIN的

的情况下实现它

7 个答案:

答案 0 :(得分:1)

您可以按照以下查询使用rand()的顺序。

select Friend_list.friend,users.name from Friend_list inner join users on Friend_list.userid=users.id order by rand();

答案 1 :(得分:0)

要选择2个随机条目,请尝试:

SELECT * FROM 
(
 SELECT * from users join on Friend_list.userid = users.id where users.id = ?
) as sub_equity
ORDER BY RAND() LIMIT 2

我在一个项目上有同样的任务: - )

答案 2 :(得分:0)

SELECT Friend_list.*, users.name
FROM Friend_list INNER JOIN users ON Friend_list.userid = users.id
ORDER BY RAND()  // this will show random records

答案 3 :(得分:0)

您可以使用ORDER BY RAND() LIMIT 3;

答案 4 :(得分:0)

尝试这样做:

SELECT u.name as person, u2.name as friend_with
FROM users u
INNER JOIN friends_list f ON u.id = f.userid
INNER JOIN users u2 ON u2.id = f.friend
WHERE f.userid = 1 or f.friend = 1
AND f.status = 'friends'
ORDER BY rand() LIMIT 3;

SQLFIDDLE DEMO

这将为您提供三个随机记录,其中包含该人的姓名和他的朋友的姓名,是其中一个用户ID

答案 5 :(得分:0)

试试这个:

SELECT * FROM friend_list f
INNER JOIN users u ON u.id = f.userid
ORDER BY rand() LIMIT 1;

SQL FIDDLE:http://sqlfiddle.com/#!2/e483c/1/0

答案 6 :(得分:0)

如果有很多行,

ORDER BY RAND()会很慢。

如果users.id是连续的并且您在users.id上有统计信息(例如MAX(users.id),MIN(users.id)),则在客户端的min,max之间生成三个随机数。

以下查询:

SELECT u.name as person, u2.name as friend_with
FROM users u
INNER JOIN friends_list f ON u.id = f.userid
WHERE users.id IN (random_number1, 2, 3);

此查询可以使用INDEX,因此它比ORDER BY RAND()

更快

啊.. users.id不会连续(例如用户删除),所以你需要生成足够的随机数。