2016-12-20 74 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