Mysql 在没有子选择的情况下,如何限制从左联接返回的结果数?
我有以下查询,但它从profile\u photos表返回多个条目。是否可以从profile photos表中只返回一个随机条目?如果不是随机的,是否可以将结果数限制为1 以下是我当前的查询:Mysql 在没有子选择的情况下,如何限制从左联接返回的结果数?,mysql,sql,Mysql,Sql,我有以下查询,但它从profile\u photos表返回多个条目。是否可以从profile photos表中只返回一个随机条目?如果不是随机的,是否可以将结果数限制为1 以下是我当前的查询: $sql = "SELECT * FROM login_users " . "LEFT JOIN profile_photos ON profile_photos.user_id = login_users.user_id " . "LEFT JOIN profiles ON
$sql = "SELECT * FROM login_users " .
"LEFT JOIN profile_photos ON profile_photos.user_id = login_users.user_id " .
"LEFT JOIN profiles ON profiles.user_id = login_users.user_id " .
"WHERE login_users.restricted <> 1 " .
"ORDER BY login_users.birthdate DESC " .
"LIMIT 0, 20";
这里有一个方法。查找随机照片,然后加入其他信息:
SELECT *
FROM (select lu.*,
(select photo_id
from profile_photos
where lu.user_id = profile_photos.user_id
order by RAND()
limit 1
) as photo_id
from login_users lu
) lu LEFT JOIN
profile_photos pp
ON pp.photo_id = lu.photo_id LEFT JOIN
profiles p
ON p.user_id = lu.user_id
WHERE lu.restricted <> 1
ORDER BY lu.birthdate DESC
LIMIT 0, 20
这假设照片id是配置文件照片的主键。您要搜索的关键字是RAND和GROUP BY。将限制更改为0,20到限制1?我正在寻找20个结果,但目前每个结果可能会有所不同,这取决于与每个配置文件关联的照片数量。+1:我刚刚在另一台笔记本电脑上用SQL Fiddle完成了输入,但您已经完成了。你这个讨厌的打字机你:嗯……它在抱怨未知的lu表。我应该在登录用户之后移动lu吗?@Paul-lu.*应该是登录用户。*@GordonLinoff-发布您的编辑。。。最内部的查询仍然引用登录用户,该用户现在别名为lu。您还可以使用别名lu两次:对于子查询和登录用户表,这不是一个错误,但在错误读取特定lu引用所属的范围时,可能会使人混淆。@Paul-www.sqlfiddle.com/!2/bf538/4