2011-04-05 103 views
5

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

例子:

如果相冊ID是[空],則意味着該歌曲是單

歌曲表:

+--------+---------+-----------+----------------+---------+---------------+-------+--------+--------+------+-------+-------+----------+ 
| Row ID | Song ID | Album ID | Song Name | Band | Date Released | Genre | Lyrics | Lenght | Size | Plays | Likes | Dislikes | 
+--------+---------+-----------+----------------+---------+---------------+-------+--------+--------+------+-------+-------+----------+ 
| 1 | Song-01 | Album-1 | Song-001 | Band-1 | 2010-12-15 | Rock | ... | 4:30 | 4 MB | 101 | 11 | 1  | 
| 2 | Song-02 | Album-1 | Song-002 | Band-1 | 2010-12-15 | Rock | ... | 5:30 | 5 MB | 102 | 12 | 2  | 
| 3 | Song-03 | Album-1 | Song-003 | Band-1 | 2010-12-15 | Rock | ... | 3:30 | 3 MB | 103 | 13 | 3  | 
| 4 | Song-04 | [null] | Song-004 | Band-1 | 2010-12-16 | Rock | ... | 4:30 | 4 MB | 104 | 14 | 4  | 
| 5 | Song-05 | Album-2 | Song-005 | Band-1 | 2010-12-17 | POP | ... | 3:30 | 3 MB | 105 | 15 | 5  | 
| 6 | Song-06 | Album-2 | Song-006 | Band-1 | 2010-12-17 | RAP | ... | 5:30 | 5 MB | 106 | 16 | 6  | 
| 7 | Song-07 | [null] | Song-007 | Band-2 | 2010-12-17 | Rock | ... | 3:30 | 3 MB | 107 | 17 | 7  | 
| 8 | Song-08 | Album-3 | Song-008 | Band-2 | 2010-12-17 | Rock | ... | 4:30 | 4 MB | 108 | 18 | 8  | 
| 9 | Song-09 | Album-3 | Song-009 | Band-2 | 2010-12-17 | POP | ... | 5:30 | 5 MB | 109 | 19 | 9  | 
| 10 | Song-10 | Album-3 | Song-010 | Band-2 | 2010-12-17 | Punk | ... | 6:30 | 6 MB | 110 | 20 | 0  | 
| 11 | Song-11 | Album-3 | Song-011 | Band-2 | 2010-12-17 | RAP | ... | 7:30 | 7 MB | 111 | 21 | 1  | 
| 12 | Song-12 | [null] | Song-012 | Band-2 | 2010-12-18 | Rock | ... | 3:30 | 3 MB | 112 | 22 | 2  | 
| 13 | Song-13 | [null] | Song-013 | Band-2 | 2010-12-18 | Rock | ... | 2:30 | 2 MB | 113 | 23 | 3  | 
| 14 | Song-14 | [null] | Song-014 | Band-3 | 2010-12-18 | Rock | ... | 6:30 | 6 MB | 114 | 24 | 4  | 
| 15 | Song-15 | [null] | Song-015 | Band-3 | 2010-12-19 | Rock | ... | 7:30 | 7 MB | 115 | 25 | 5  | 
| 16 | Song-16 | [null] | Song-016 | Band-3 | 2010-12-19 | Rock | ... | 4:30 | 4 MB | 116 | 26 | 6  | 
| 17 | Song-17 | [null] | Song-017 | Band-4 | 2010-12-19 | POP | ... | 3:30 | 3 MB | 117 | 27 | 7  | 
| 18 | Song-18 | [null] | Song-018 | Band-4 | 2010-12-19 | POP | ... | 2:30 | 2 MB | 118 | 28 | 8  | 
| 19 | Song-19 | [null] | Song-019 | Band-5 | 2010-12-20 | Rock | ... | 4:30 | 4 MB | 119 | 29 | 9  | 
| 20 | Song-20 | [null] | Song-020 | Band-5 | 2010-12-20 | Rock | ... | 5:30 | 5 MB | 120 | 30 | 0  | 
| 21 | Song-21 | [null] | Song-021 | Band-5 | 2010-12-20 | Rock | ... | 6:30 | 6 MB | 121 | 31 | 1  | 
| 22 | Song-22 | Album-4 | Song-022 | Band-5 | 2010-12-21 | Rock | ... | 3:30 | 3 MB | 122 | 32 | 2  | 
| 23 | Song-23 | Album-4 | Song-023 | Band-5 | 2010-12-21 | Rock | ... | 2:30 | 2 MB | 123 | 33 | 3  | 
| 24 | Song-24 | Album-4 | Song-024 | Band-5 | 2010-12-21 | Rock | ... | 4:30 | 4 MB | 124 | 34 | 4  | 
| 25 | Song-25 | [null] | Song-025 | Band-6 | 2010-12-22 | Rock | ... | 5:30 | 5 MB | 125 | 35 | 5  | 
| 26 | Song-26 | [null] | Song-026 | Band-6 | 2010-12-22 | Rock | ... | 6:30 | 6 MB | 126 | 36 | 6  | 
| 27 | Song-27 | Album-5 | Song-027 | Band-7 | 2010-12-22 | POP | ... | 4:30 | 4 MB | 127 | 37 | 7  | 
| 28 | Song-28 | Album-5 | Song-028 | Band-7 | 2010-12-22 | PUNK | ... | 3:30 | 3 MB | 128 | 38 | 8  | 
| 29 | Song-29 | [null] | Song-029 | Band-7 | 2010-12-23 | Rock | ... | 2:30 | 2 MB | 129 | 39 | 9  | 
| 30 | Song-30 | Album-6 | Song-030 | Band-8 | 2010-12-25 | Rock | ... | 5:30 | 5 MB | 130 | 40 | 0  | 
+--------+---------+-----------+----------------+---------+---------------+-------+--------+--------+------+-------+-------+----------+ 

相冊表:

+--------+-----------+----------------+---------+---------------+-------------------+--------+-------+----------+ 
| Row ID | Album ID | Album Name | Band | Date Released |  Genre  | Lenght | Likes | Dislikes | 
+--------+-----------+----------------+---------+---------------+-------------------+--------+-------+----------+ 
| 1 | Album-1 | Album One | Band-1 | 2010-12-15 |  Rock  | 13:30 | 101 | 31 | 
| 2 | Album-2 | Album Two | Band-1 | 2010-12-17 |  POP/RAP  | 9:00 | 102 | 32 | 
| 3 | Album-3 | Album Three | Band-2 | 2010-12-17 | Rock/Punk/POP/RAP | 24:00 | 103 | 33 | 
| 4 | Album-4 | Album Four | Band-5 | 2010-12-21 |  Rock  | 10:30 | 104 | 34 | 
| 5 | Album-5 | Album Five | Band-7 | 2010-12-22 |  Punk/POP  | 8:00 | 105 | 35 | 
| 6 | Album-6 | Album Six | Band-8 | 2010-12-25 |  Rock  | 5:30 | 106 | 36 | 
+--------+-----------+----------------+---------+---------------+-------------------+--------+-------+----------+ 

,如果我想只需要最新的五張專輯和/或單打 這意味着結果會(下令從最新到最老):

通過列的名字「我的意思是「單名或專輯名稱」

第1頁:

+-----------------+---------+-----------------+-------------------+----------+-----------+--------+--------+------+-------+----------+-------+ 
|  Name  | Band | Date Released |  Genre  | IsAlbum? | IsSingle? | Lyrics | Lenght | Size | Likes | Dislikes | Plays | 
+-----------------+---------+-----------------+-------------------+----------+-----------+--------+--------+------+-------+----------+-------+ 
| Album Six  | Band-8 | 2010-12-25 |  Rock  | YES |  NO | - | 5:30 | -- | 106 | 36 | - | 
| Song 29  | Band-7 | 2010-12-23 |  Rock  | NO | YES | ... | 2:30 | 2 MB | 39 |  9 | 129 | 
| Album Five  | Band-7 | 2010-12-22 |  Punk/POP  | YES |  NO | - | 8:00 | -- | 105 | 35 | - | 
| Song 26  | Band-6 | 2010-12-22 |  Rock  | NO | YES | ... | 6:30 | 6 MB | 36 |  6 | 126 | 
| song 25  | Band-6 | 2010-12-22 |  Rock  | NO | YES | ... | 5:30 | 5 MB | 35 |  5 | 125 | 
+-----------------+---------+-----------------+-------------------+----------+-----------+--------+--------+------+-------+----------+-------+ 

,如果我想只需要最新的五(上表中的)後,最新的五張專輯和/或單打,結果將是從最新到最年長):

第2頁:

+-----------------+---------+-----------------+-------------------+----------+-----------+--------+--------+------+-------+----------+-------+ 
|  Name  | Band | Date Released |  Genre  | IsAlbum? | IsSingle? | Lyrics | Lenght | Size | Likes | Dislikes | Plays | 
+-----------------+---------+-----------------+-------------------+----------+-----------+--------+--------+------+-------+----------+-------+ 
| Album Four  | Band-5 | 2010-12-21 |  Rock  | YES |  NO | - | 10:30 | -- | 104 | 34 | - | 
| Song 21  | Band-5 | 2010-12-20 |  Rock  | NO | YES | ... | 6:30 | 6 MB | 31 |  1 | 121 | 
| Song 20  | Band-5 | 2010-12-20 |  Rock  | NO | YES | ... | 5:30 | 5 MB | 30 |  0 | 120 | 
| Song 19  | Band-5 | 2010-12-20 |  Rock  | NO | YES | ... | 4:30 | 4 MB | 29 |  9 | 119 | 
| song 18  | Band-4 | 2010-12-19 |  POP  | NO | YES | ... | 2:30 | 2 MB | 28 |  8 | 118 | 
+-----------------+---------+-----------------+-------------------+----------+-----------+--------+--------+------+-------+----------+-------+ 

和五之前他們的將是:

第3頁:

+-----------------+---------+-----------------+-------------------+----------+-----------+--------+--------+------+-------+----------+-------+ 
|  Name  | Band | Date Released |  Genre  | IsAlbum? | IsSingle? | Lyrics | Lenght | Size | Likes | Dislikes | Plays | 
+-----------------+---------+-----------------+-------------------+----------+-----------+--------+--------+------+-------+----------+-------+ 
| Song 17  | Band-4 | 2010-12-19 |  POP  | NO | YES | ... | 3:30 | 3 MB | 27 |  7 | 117 | 
| Song 16  | Band-3 | 2010-12-19 |  Rock  | NO | YES | ... | 4:30 | 4 MB | 26 |  6 | 116 | 
| Song 15  | Band-3 | 2010-12-19 |  Rock  | NO | YES | ... | 5:30 | 5 MB | 25 |  5 | 115 | 
| Song 14  | Band-3 | 2010-12-18 |  Rock  | NO | YES | ... | 6:30 | 6 MB | 24 |  4 | 114 | 
| song 13  | Band-2 | 2010-12-18 |  Rock  | NO | YES | ... | 2:30 | 2 MB | 23 |  3 | 113 | 
+-----------------+---------+-----------------+-------------------+----------+-----------+--------+--------+------+-------+----------+-------+ 

和五前:

第4頁:

+-----------------+---------+-----------------+-------------------+----------+-----------+--------+--------+------+-------+----------+-------+ 
|  Name  | Band | Date Released |  Genre  | IsAlbum? | IsSingle? | Lyrics | Lenght | Size | Likes | Dislikes | Plays | 
+-----------------+---------+-----------------+-------------------+----------+-----------+--------+--------+------+-------+----------+-------+ 
| Song 12  | Band-2 | 2010-12-18 |  Rock  | NO | YES | ... | 3:30 | 3 MB | 22 |  2 | 112 | 
| Album Three | Band-2 | 2010-12-17 | Rock/Punk/POP/RAP | YES |  NO | - | 24:00 | -- | 103 | 33 | - | 
| Song 7   | Band-2 | 2010-12-17 |  Rock  | NO | YES | ... | 3:30 | 3 MB | 17 |  7 | 107 | 
| Album Two  | Band-1 | 2010-12-17 |  POP/RAP  | YES |  NO | - | 9:00 | -- | 102 | 32 | - | 
| song 4   | Band-1 | 2010-12-16 |  Rock  | NO | YES | ... | 4:30 | 4 MB | 14 |  4 | 104 | 
+-----------------+---------+-----------------+-------------------+----------+-----------+--------+--------+------+-------+----------+-------+ 

而在最後一個表格(或頁面):

第5頁:

+-----------------+---------+-----------------+-------------------+----------+-----------+--------+--------+------+-------+----------+-------+ 
|  Name  | Band | Date Released |  Genre  | IsAlbum? | IsSingle? | Lyrics | Lenght | Size | Likes | Dislikes | Plays | 
+-----------------+---------+-----------------+-------------------+----------+-----------+--------+--------+------+-------+----------+-------+ 
| Album One  | Band-1 | 2010-12-15 |  Rock  | YES |  NO | - | 13:00 | -- | 101 | 31 | - | 
+-----------------+---------+-----------------+-------------------+----------+-----------+--------+--------+------+-------+----------+-------+ 

但是,問題是,當我做到這一點的X和Y在 「LIMIT X,Y」 韓元是X = 0,Y = 5或X = 5,Y = 5或X = 10,Y = 5等等......

所以,我的問題是:我該怎麼做我所做的以上在PHP和SQL(MySQL)?


對不起,我的英語 ,並在此先感謝

+0

'X = 5,Y = 10'對不對?這是一個錯字嗎? – Shoe 2011-04-05 20:00:36

+3

請給我們看代碼。 – Shoe 2011-04-05 20:01:43

+2

我不確定如果你嘗試過,你可能會讓這更混亂。顯示你的SQL。 – JNK 2011-04-05 20:15:47

回答

3

你得到LIMIT子句錯誤。它是OFFSET,QUANTITY。您的示例查詢一次只能提取5條記錄,因此QUANTITY始終爲5,並且每個「頁面」結果的偏移量將增加5。

Top 5 songs/albums: LIMIT 0,5 
Top 6-10 songs/album: LIMIT 5,5 
Top 11-15 songs/albums: LIMIT 10,5 
etc... 
+0

這是一個打字錯誤,我的意思是:0,5或5,5或10,5 ... 但是,不工作,因爲我想從歌曲表中得到結果:不同的專輯+不明顯的單曲(因爲所有單曲都有相同的「專輯」,它是[null])...看看結果表的例子... – Andy 2011-04-05 20:27:02

+1

鑑於你有兩個不兼容的查詢,你可能會想做兩個se perate查詢,將它們聯合起來,然後從該結果中進行選擇並對該父/外部查詢進行排序/限制。 – 2011-04-05 20:38:01

+0

這種混淆是主張'LIMIT x OFFSET y'而不是'LIMIT y,x'的好理由。 – staticsan 2011-04-05 23:14:18

0

這是我的快速刺你的問題,但我做了一些巨大的假設。

我相信你想所有專輯和單曲在發佈順序中列出,並且你想顯示5每個「頁」。假設,這個查詢應該工作。長遠來說,我會把它變成一個觀點。

SELECT "Name", "Date Released" 
FROM (
    SELECT "Album ID" as "Name", "Date Released" FROM Albums 
    UNION ALL 
    SELECT "Song Name" as "Name", "Date Released" FROM Songs WHERE "Album ID" IS NULL 
) as AlbumsAndSingles 
ORDER BY "Date Released" ASC 
LIMIT X,5 

然後,從0開始,在上述查詢每一頁上遞增X 5。

+0

是的,你理解我是對的,但是,如果我想要一張專輯或一張專輯只能在一個頁面中顯示,那麼這是行不通的......在上面給出的「頁面」1中的例子中,有兩個專輯和三首歌曲,這些在歌曲表格中是6行,在「頁面」4中有另外兩個專輯和另外三首歌曲,這些在歌曲表格中是9行,所以我不能只將X增加5,因爲每個頁面獲得的行數多於或少於5 ... – Andy 2011-04-05 20:39:31

+0

您正在過度複雜的答案。以上查詢僅返回空專輯歌曲和專輯。它不關心一個專輯是否有14首歌曲或3個。此查詢將按照您的需求限制和偏移的順序返回專輯和單曲(沒有專輯的歌曲)。 – 2011-04-05 20:44:53

+0

我收到錯誤:「#1248 - 每個派生表都必須有自己的別名」? – Andy 2011-04-05 21:02:43