1

我有两张桌子:

用户:

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

如您所见,有一个 USER 数据库,它通过用户 ID 连接到 IMAGES 数据库。只有一个唯一的用户行,但每个用户可以有多个图像。

我想要的是从数据库和他的所有图像中获取一个 RANDOM用户。条件是没有图像的用户不应该被选中。

你能帮我建立一个 mysql 查询来实现吗?

PS 如果用户数据重复(因为多个图像行)并不重要,结果集中只有一个用户。

4

1 回答 1

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

演示

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

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);

演示

于 2012-09-14T23:35:37.407 回答