Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在没有子选择的情况下,如何限制从左联接返回的结果数?_Mysql_Sql - Fatal编程技术网

Mysql 在没有子选择的情况下,如何限制从左联接返回的结果数?

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

我有以下查询,但它从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 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