使用数据库中的现有图像选择随机用户

时间:2012-09-14 23:30:41

标签: mysql sql

我有两张桌子:

用户:

userID | uName | 
-----------------
   1   |  John
   2   |  Bohn
   3   |  Kohn
   4   |  Lohn
   5   |  Zohn
   6   |  Rohn

图片:

imageID | url | userID
----------------------
   1    |  x  |   2
   2    |  x  |   2
   3    |  x  |   1
   4    |  x  |   3
   5    |  x  |   3
   6    |  x  |   3

正如您所看到的,USERID数据库通过userID连接到IMAGES数据库。 只有一个唯一的用户行,但每个用户可以有多个图像。

我想要的是从数据库和他的所有图像中获取 ONE RANDOM 用户。条件是如果没有图像,则不应选择用户。

你能帮我构建一个mysql查询来实现这个目标吗?

P.S。如果用户数据重复(由于多个图像行)无关紧要,结果集中只有一个用户。

1 个答案:

答案 0 :(得分:3)

首先,INNER JOIN两个表,以排除没有任何图像的用户;然后,ORDER BY RAND(),随机化结果集;最后,选择第一行以获得随机userId

SELECT u.*
FROM user u INNER JOIN images i ON (u.userId = i.userId)
ORDER BY RAND()
LIMIT 1

<强> DEMO

编辑:要从随机用户中选择所有图像,请使用以下命令:

SELECT i.*
FROM images i 
     INNER JOIN 
     (SELECT u.userId
      FROM user u INNER JOIN images i ON (u.userId = i.userId)
      ORDER BY RAND()
      LIMIT 1) rand_user 
     ON (i.userId = rand_user.userId);

<强> DEMO