2011-04-05 101 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