如何在MySql查询中显示过滤结果ONCE

时间:2016-12-20 14:59:22

标签: mysql sorting mariadb

所以这就是我的困境。我想向我的画廊展示最新的图片提交。问题是有时最近的提交是由同一个人提出的。我希望一个人只出现一次,因为有时大多数人一次上传多张照片。

参考我的表格(简化)

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

理想情况下,我希望用户成为唯一身份用户。

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

我真的不知道如何处理这个问题。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分: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