我的问题是我不断添加不同日期的行,因此表格中歌曲的第一个条目不一定是最早出现的,这正是我想要显示的。
已玩表:
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/