簡體   English   中英

提取隨機行以及來自另一個表的匹配行?

[英]Fetching random rows, along with matching rows from another table?

我試圖從表'users'中獲取10個隨機行,以及從表'Profile_pictures'中匹配的配置文件圖片。

到目前為止我的查詢:

SELECT u.id, u.username, u.status, p.file_name
FROM users AS u, profile_pictures AS p
WHERE p.status = 1 AND u.status != 3 AND u.status != 4
AND RAND()<(SELECT ((1/COUNT(*))*10) FROM users AS u)
GROUP BY u.id
ORDER BY RAND()
LIMIT 7

問題在於,所有行都獲得相同的配置文件圖片。

我真的非常希望您能幫助我。

如果要從用戶那里獲得10個隨機行,則應在聯接之前在子查詢中從users中進行選擇:

SELECT u.id, u.username, u.status, p.file_name
FROM (select u.*
      from users u
      where u.status <> 3 AND u.status <> 4
      order by rand()
      limit 10
     ) u7 join
     profile_pictures p
     on u.id = p.user_id and p.status = 1;

這也修復了連接符號。 如果要從用戶那里隨機獲得10張圖片,可以在加入后進行選擇:

SELECT u.id, u.username, u.status, p.file_name
FROM users u join
     profile_pictures p
     on u.id = p.user_id
where u.status <> 3 AND u.status <> 4 and p.status = 1
order by rand()
limit 10;

順便說一句,這也修復了連接。 大概有一個用戶ID字段,將圖片連接到用戶。

使用LEFT JOIN語句將用戶與其圖片匹配。 我假設profile_pictures有一個名為user_id的列用於匹配它們。 LEFT JOIN將返回用戶,無論他們是否有圖片。 如果只想返回有圖片的用戶,請改用INNER JOIN。

SELECT u.id, u.username, u.status, p.file_name
FROM users AS u
LEFT JOIN profile_pictures AS p ON u.id = p.user_id
WHERE p.status = 1 AND u.status != 3 AND u.status != 4
ORDER BY RAND()
LIMIT 7

RAND()<(SELECT ((1/COUNT(*))*10) FROM users AS u)看起來沒有必要,所以我將其取出。 那是為了什么

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM