1

次のクエリがありますが、profile_photosテーブルから複数のエントリが返されます。プロフィール写真テーブルからランダムなエントリを1つだけ返すことは可能ですか?ランダムでない場合、結果の数を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";
4

1 に答える 1

2

これが1つの方法です。ランダムな写真を検索してから、追加情報に参加してください。

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

これは、photo_idがprofile_photosの主キーであることを前提としています。

于 2012-08-08T14:55:33.717 に答える