【问题标题】:Need help with PHP and MySQL…需要 PHP 和 MySQL 方面的帮助……
【发布时间】:2011-06-16 20:24:06
【问题描述】:

我有一张歌曲表,有些歌曲是专辑歌曲,有些是单曲...而且我有一张专辑表...

歌曲表cols:Song_ID, Album_ID, Song_Name, Date_Released, Timestamp_Released,其他... 如果Album_ID为[null],则表示该歌曲为单曲

相册表列:Album_ID, Album_Name, Song_IDs, Date_Released,其他...

注意1:相册表中没有Timestamp_Released

注 2:Date_Released 只是没有时间的一天,即“2011-06-16”

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

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

上面的查询根据日期对歌曲和专辑列表进行排序,并将专辑中最旧歌曲的Date_ReleasedTimestamp_Released 赋予专辑...

所以我的问题是如何给专辑中最新歌曲的Date_ReleasedTimestamp_Released

谢谢你:)

【问题讨论】:

  • 你试过了吗,ORDER BY 2 ASC,1 而不是 ORDER BY 2 DESC,1
  • 那不是我想要的...
  • 只是出于好奇,为什么专辑中的歌曲有不同的发行日期?
  • 不是答案,但我只想说,在专辑表中包含歌曲 ID 委婉地说是没有必要的。而且你应该只知道专辑的发布日期。如果是单曲没关系 - 只需在专辑表中添加一个类型 - ep、lp、双 lp 或单曲。同一张专辑的歌曲如何在不同的时间发行?很奇怪。我认为非常低效的设计。
  • @horatio & @AR :我只是接受这种可能性......我也很好奇如何在 php 和 sql 中做到这一点:P ...

标签: php mysql sql multiple-tables


【解决方案1】:

而不是s.Date_Released, s.Timestamp_ReleasedMAX(s.Date_Released) as Newest_Date_Released, MAX(s.Timestamp_Released) as Newest_Timestamp_Releasd 更新

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; 

【讨论】:

  • 我试过这个,但如果我这样做,查询根本不起作用,我得到的结果是 0 行......
  • 您是否尝试仅仅为 max(foo) 添加另一列?
  • @Andy:尝试更新版本(注意:GROUP BY 1,而不是 BY 1,2
  • 有一个问题,它们仍然按最旧歌曲的日期在表格中排序...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 2014-04-07
  • 1970-01-01
相关资源
最近更新 更多