2011-06-16 52 views
0

我的歌曲表,有些歌曲是專輯中的歌曲,有些是單身......而且我有張專輯的一張桌子需要幫助的PHP和MySQL ......

歌曲表的cols:Song_ID, Album_ID, Song_Name, Date_Released, Timestamp_Released,其他... 如果Album_ID爲[null],這意味着這首歌是一個

專輯表的cols: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_Released和最古老的歌曲Timestamp_Released的歌曲和專輯列表在專輯...

所以我的問題是如何給專輯Date_ReleasedTimestamp_Released的最新歌曲呢?

謝謝:)

+0

你有沒有試過,ORDER BY 2 ASC,1而不是ORDER BY的2 DESC,1 – 2011-06-16 20:34:03

+0

這不做我想要的東西...... – Andy 2011-06-16 20:36:13

+0

只是出於好奇,爲什麼專輯中的歌曲有不同的發行日期? – horatio 2011-06-16 20:42:41

回答

1

UPDATE而不是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

我試過了,但查詢根本不起作用我這樣做,我得到0行的結果... – Andy 2011-06-16 20:39:49

+0

你嘗試僅僅爲max(foo)添加另一列嗎? – horatio 2011-06-16 21:11:38

+0

@安迪:嘗試更新版本(注意:「GROUP BY 1」,而不是「BY 1,2」) – a1ex07 2011-06-16 21:24:00