如何从一个数据库表MySQL中的组返回第一个值

wor*_*man 2 php mysql sql database greatest-n-per-group

photos在MySQL数据库中有一个表,其中包含照片文件名和其他相关信息.结构如下:

+----------+------------+-------------+
| photo_id | gallery_id | photo_fname |
|----------|------------|-------------|
|     1    |      1     |  DSC2001    |
|     2    |      1     |  DSC2002    |
|     3    |      1     |  DSC2003    |
|     4    |      2     |  DSC2004    |
|     5    |      2     |  DSC2005    |
|     6    |      2     |  DSC2006    |
|     7    |      3     |  DSC2007    |
|     8    |      3     |  DSC2008    |
|     9    |      3     |  DSC2009    |
+----------+------------+-------------+
Run Code Online (Sandbox Code Playgroud)

我想要做的是编写一个返回每个图库的第一个照片文件名的查询,如下所示:

+----------+------------+-------------+
| photo_id | gallery_id | photo_fname |
|----------|------------|-------------|
|     1    |      1     |  DSC2001    |
|     4    |      2     |  DSC2004    |
|     7    |      3     |  DSC2007    |
+----------+------------+-------------+
Run Code Online (Sandbox Code Playgroud)

我研究了这个,直到昨晚我的头痛克服了我,虽然我发现了类似的问题,但他们似乎并没有想要做同样的事情.我尝试了子查询,我在这里尝试了其他帖子的示例代码,但无法使其工作.无论是由于脑雾还是没有找到正确的解决方案.

我只想返回如上所示的结果,仅此而已.

提前谢谢了!

更新: 道歉,表名是照片,FWIW.

其次,我真正想要的只是文件名,而不是照片或图库ID,我只是为了视觉清晰而包含了这些.如果这引起混乱,我道歉.

Lam*_*mak 6

试试这个:

SELECT *
FROM YourTable
WHERE photo_id IN ( SELECT MIN(photo_id) 
                    FROM YourTable
                    GROUP BY gallery_id)
Run Code Online (Sandbox Code Playgroud)

看演示

对于您更新的问题:

SELECT photo_fname
FROM photos
WHERE photo_id IN ( SELECT MIN(photo_id) 
                    FROM photos
                    GROUP BY gallery_id)
Run Code Online (Sandbox Code Playgroud)