2012-08-08 53 views
1

我有以下查詢,但它從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"; 
+0

您正在搜索的關鍵字是「RAND()」和「GROUP BY」。 – naden 2012-08-08 14:52:40

+0

如何將「LIMIT 0,20」更改爲「LIMIT 1」? – Sablefoste 2012-08-08 14:54:10

+0

我在尋找20個結果,但目前每個單獨的結果可能因所綁定的每個配置文件的照片數量而異。 – Paul 2012-08-08 14:55:16

回答

2

這是一種方法。查找隨機的照片,然後在附加信息加入:

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主鍵。

+0

+1:我剛剛在另一臺筆記本電腦上的SQL小提琴上輸入完畢,但你已經完成了。你nippy typer你:) – MatBailie 2012-08-08 15:01:54

+0

嗯......它抱怨未知的路表。我應該在login_users之後移動lu嗎? – Paul 2012-08-08 15:04:51

+0

@Paul - 'lu。*'應該是'login_users。*' – MatBailie 2012-08-08 15:10:30