我有两张桌子:
用户:
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。如果用户数据重复(由于多个图像行)无关紧要,结果集中只有一个用户。
答案 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 强>