2016-12-20 77 views
0

所以這裏是我的兩難境地。我想向我的畫廊展示最新的圖像提交內容。問題是有時最近的提交是由同一個人提出的。我希望一個人只能出現一次,因爲有時候大多數人一次只能上傳一張以上的照片。如何在MySql查詢中顯示過濾結果ONCE

僅供參考我的表(簡體)

Users 
user_id, username 

Gallery 
media_id, user_id, filename, date_added 

這是我當前的查詢:

SELECT g.* 
    , u.user_id 
    , u.fullname AS real_name 
    FROM gallery g 
    LEFT 
    JOIN users u 
    ON u.user_id = g.user_id 
WHERE g.status = 'approved' 
ORDER 
    BY g.date_added DESC 
LIMIT 10 

所以我得到的東西,如:

user_id: 9000 7383idsj39390.jpg 
user_id: 9000 sdujnfsd83ss2.jpg 
user_id: 829 sdfs3dgsdfsd3.jpg 
user_id: 1000 dsfsdfsd34523.jpg 

理想,我想要使用r是唯一的用戶。

user_id: 9000 7383idsj39390.jpg 
user_id: 829 sdfs3dgsdfsd3.jpg 
user_id: 1000 dsfsdfsd34523.jpg 
user_id: 500 29928sdksdui2.jpg 

我真的不知道如何解決這個問題。任何幫助,將不勝感激!

+1

爲什麼'image_122266.jpg'而不是'image_122242.jpg' –

+0

酷...也許我會前往那邊以後:-) –

+1

@TimBiegeleisen是第一位的左上角http://winterbash2016.stackexchange.com/ –

回答

0

如果您可以接受簡單地從每個用戶的記錄中獲取字典中最大的圖像文件名,那麼您可以使用子查詢以及GROUP BY來確定要顯示在結果集中的記錄。像這樣的東西應該工作:

SELECT g.*, 
     u.user_id, 
     u.fullname AS real_name 
FROM Gallery g 
LEFT JOIN Users u 
    ON u.user_id = g.user_id 
INNER JOIN 
(
    SELECT u.user_id, MAX(g.file_name) AS file_name 
    FROM Gallery g 
    LEFT JOIN Users u 
     ON u.user_id = g.user_id 
    WHERE g.status = 'approved' 
    GROUP BY u.user_id 
) t 
    ON u.user_id = t.user_id AND 
     g.file_name = t.file_name 
ORDER BY g.date_added DESC 
LIMIT 10 
+0

好吧,文件名只是一個例子。他們實際上是隨機的單詞。我按照上面的建議瀏覽了重複鏈接,但小提琴鏈接不起作用。其中一個答案對我來說沒有任何意義,因爲它看起來在用戶表內,我不需要查看它,只是想消除庫表中的「重複」用戶。 – Hugo