为什么此查询未正确显示与最早日期关联的记录?

时间:2017-01-08 05:51:51

标签: 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有机会查看所有日期之前选择每首歌的第一次出现,但我不是当然。在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

试试这个:

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的最早日期,然后将结果与主要联接结合以找到所需的结果。