php - 为什么这个查询没有正确显示与最早日期相关的记录?

标签 php mysql

我的问题是我不断添加不同日期的行,因此表格中歌曲的第一个条目不一定是最早出现的,这正是我想要显示的。

已玩表:

song_name        played_id        show_id
-------------------------------------------
A Song           0001             000a
Another Song     0002             000a
A Song           0003             000b

显示表:

show_id          date
-------------------------------------------
000a             2/2/2012
000b             1/1/2011

期望的结果:

song_name        played_id         date
-------------------------------------------
A Song           0003              1/1/2011
Another Song     0002              2/2/2012

当前令人沮丧的结果:

song_name         played_id        date
-------------------------------------------
A Song            0001             2/2/2012
Another Song      0002             2/2/2012

来自这个查询:

SELECT p.song_id, s.date AS date, p.song_name, p.show_id, p.set_order, p.played_id
FROM played p
INNER JOIN shows s
ON p.show_id = s.show_id
GROUP BY p.song_id
ORDER BY s.date ASC

当我将 LIMIT 1 添加到上述查询时,我的结果不会显示离散歌曲名称的列表,而是只显示一行。

我假设我可能需要使用子查询,因为 GROUP BY 会在 ORDER BY 有机会查看所有日期之前选择每首歌曲的第一次出现,但我不确定。在此先感谢您的帮助!

最佳答案

试试这个:

SELECT 
    p.song_id,
    s.date,
    p.song_name,
    p.show_id,
    p.set_order,
    p.played_id
FROM
    played p
        INNER JOIN
    shows s ON p.show_id = s.show_id
        INNER JOIN
    (SELECT 
        p.song_id, MIN(s.date) DATE
    FROM
        played p
    INNER JOIN shows s ON p.show_id = s.show_id
    GROUP BY p.song_id) x ON p.song_id = x.song_id
        AND s.date = x.date;

它找到每个 song_id 的最早日期,然后将结果与主连接连接以找到所需的结果。

关于php - 为什么这个查询没有正确显示与最早日期相关的记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41529914/

相关文章:

c# - Entity Framework 6 - 多个 DefaultConnectionFactory?

javascript - Node js sql查询内连接

php - SQL QUERY 选择禁止列表、子级和父级连接

php - jquery chat 试图从我想要发送消息的用户那里获取用户ID

PHP - 如何以任何顺序测试多维数组中的重复元素值

MySQL:通过多个值的分组获取具有最高时间戳的行

php - 实时处理和更新的最佳方法是什么?

php - 为 Magento 属性创建新选项

php - Yii 的 accessRules 误解

java - 为什么Mysql字段不更新? - java