需要PHP和MySQL的帮助…;

需要PHP和MySQL的帮助…;,php,mysql,sql,multiple-tables,Php,Mysql,Sql,Multiple Tables,我有一张歌曲表,有些是专辑歌曲,有些是单曲。。。我有一张专辑表 歌曲表cols:歌曲ID、专辑ID、歌曲名称、发布日期、发布时间戳,其他。。。 如果唱片集ID为[null],则表示该歌曲为单曲 专辑表列:专辑ID、专辑名称、歌曲ID、发布日期,其他 注1:相册表中没有发布的时间戳 注2:Date\u Released仅为无时间的一天,即“2011-06-16” 我目前正在使用此查询来显示一个表(在我的html/php页面中),其中每一行都是一个单独的或一个唱片集(唱片集中的歌曲作为唱片集显示在一

我有一张歌曲表,有些是专辑歌曲,有些是单曲。。。我有一张专辑表

歌曲表cols:
歌曲ID、专辑ID、歌曲名称、发布日期、发布时间戳
,其他。。。 如果唱片集ID为
[null]
,则表示该歌曲为单曲

专辑表列:
专辑ID、专辑名称、歌曲ID、发布日期
,其他

注1:相册表中没有发布的时间戳

注2:
Date\u Released
仅为无时间的一天,即“2011-06-16”

我目前正在使用此查询来显示一个表(在我的html/php页面中),其中每一行都是一个单独的或一个唱片集(唱片集中的歌曲作为唱片集显示在一行中)

上面的查询根据日期对歌曲和专辑列表进行排序,并为专辑提供专辑中最早歌曲的
date\u release
Timestamp\u release

所以我的问题是如何给专辑提供最新歌曲的发布日期和发布时间


谢谢:)

而不是
s.Date\u Released,s.Timestamp\u Released
write
MAX(s.Date\u Released)作为最新发布的日期,MAX(s.Timestamp\u Released)作为最新发布的时间
更新

SELECT 
IF(Album_ID IS NULL,s.Song_Name,a.Album_Name) as name, 
MAX(IF(Album_ID IS NULL,s.Date_Released,a.Date_Released)) as datereleased, 
MAX(s.Timestamp_Released)
FROM songs s LEFT JOIN albums a ON (s.Album_ID = a.Album_ID)
GROUP BY 1
ORDER BY 2 DESC,1
LIMIT 0,10; 

你试过了吗,按2 ASC排序,1而不是按2 DESC排序,1这不符合我的要求…只是出于好奇,为什么专辑中的歌曲有不同的发行日期?不是答案,但我只想说,专辑表中有歌曲ID是不必要的。你应该只知道专辑的发行日期。如果是单曲,也可以-只需在唱片表中添加一种类型-ep、lp、double lp或single。同一张专辑中的歌曲如何在不同的时间发行?真奇怪。我认为设计效率很低。@horatio&@AR:我只是认为有这种可能性。。。另外,我对如何在php和sql中实现这一点很好奇:P…我尝试过这个,但查询根本不起作用。如果我这样做,我得到的结果是0行…你是否尝试过只为max(foo)添加另一列?@Andy:尝试更新版本(注意:
按1分组
,而不是
按1,2
)出现问题,它们仍然是按最古老歌曲的日期排列的。。。
SELECT 
IF(Album_ID IS NULL,s.Song_Name,a.Album_Name) as name, 
MAX(IF(Album_ID IS NULL,s.Date_Released,a.Date_Released)) as datereleased, 
MAX(s.Timestamp_Released)
FROM songs s LEFT JOIN albums a ON (s.Album_ID = a.Album_ID)
GROUP BY 1
ORDER BY 2 DESC,1
LIMIT 0,10;