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

标签 php mysql sql database greatest-n-per-group

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

+----------+------------+-------------+
| 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    |
+----------+------------+-------------+

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

+----------+------------+-------------+
| photo_id | gallery_id | photo_fname |
|----------|------------|-------------|
|     1    |      1     |  DSC2001    |
|     4    |      2     |  DSC2004    |
|     7    |      3     |  DSC2007    |
+----------+------------+-------------+

我对此进行了研究,直到昨晚我的头痛压倒了我,尽管我发现了类似的问题,但在我看来,他们似乎并没有想做完全相同的事情。我尝试了子查询,我尝试了其他帖子中的示例代码,但无法使其工作。要么是由于脑雾,要么只是没有找到正确的解决方案。

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

非常感谢!

更新: 抱歉,表格名称是 photos,FWIW。

其次,我真正想要的是文件名,而不是照片或图库 ID,我只是为了视觉清晰度而添加了这些内容。如果这引起了困惑,我深表歉意。

最佳答案

试试这个:

SELECT *
FROM YourTable
WHERE photo_id IN ( SELECT MIN(photo_id) 
                    FROM YourTable
                    GROUP BY gallery_id)

See a demo

对于您更新的问题:

SELECT photo_fname
FROM photos
WHERE photo_id IN ( SELECT MIN(photo_id) 
                    FROM photos
                    GROUP BY gallery_id)

关于php - 如何从一个数据库表中的组返回第一个值,MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14758342/

相关文章:

java - 如何在JAVA中解决SQL "Unknown column ' c' in 'field list' "而实际上没有语法问题

MySQL:使用另一个表中的两个计数进行排序?

mysql - SQL如何在sql中添加if else条件

php - 加快对同一mysql服务器、不同表的请求

php - 在不在数据库中创建表的情况下更改 wordpress 模板中的链接

php - 如何检查php上传文件的目录是否正确?

php - 使用 html2pdf 在 pdf 中生成动态行

sql - 更改表SQL字符串-语法错误

sql - 数据库中标识列的命名约定

sql - REGEXP_REPLACE - 仅当包含在 () 中时才从字符串中删除新行\n