Need help with PHP and MySQL [duplicate]
I have a table of songs, some songs are album song, and some are singles... And I have a table of albums...
Example:
if the album ID is [null], it means the song is a single
Songs Table:
+--------+---------+-----------+----------------+---------+---------------+-------+--------+--------+------+-------+-------+----------+
| 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 |
+--------+---------+-----------+----------------+---------+---------------+-------+--------+--------+------+-------+-------+----------+
Albums Table:
+--------+-----------+----------------+---------+---------------+-------------------+--------+-------+----------+
| 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 |
+--------+-----------+----------------+---------+---------------+-------------------+--------+-------+----------+
And If I want to take only the latest five albums and/or singles which means the result will be (ordered from lat开发者_JAVA技巧est to eldest):
by the column 'name' I mean 'Single name or Album name'
Page 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 |
+-----------------+---------+-----------------+-------------------+----------+-----------+--------+--------+------+-------+----------+-------+
And If I want to take only the latest five after the latest five (the ones in the table above) albums and/or singles, the result will be ordered from latest to eldest):
Page 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 |
+-----------------+---------+-----------------+-------------------+----------+-----------+--------+--------+------+-------+----------+-------+
And the five before them will be:
Page 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 |
+-----------------+---------+-----------------+-------------------+----------+-----------+--------+--------+------+-------+----------+-------+
And the five before:
Page 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 |
+-----------------+---------+-----------------+-------------------+----------+-----------+--------+--------+------+-------+----------+-------+
And in the last table (or page):
Page 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 | - |
+-----------------+---------+-----------------+-------------------+----------+-----------+--------+--------+------+-------+----------+-------+
But, the problem is that when I do that the X and the Y in "LIMIT X , Y" won't be X=0,Y=5 or X=5,Y=5 or X=10,Y=5 and so on... Also, I need different columns from each table in the result (look at the examples)...
So, my question is: how can I do what I did above in PHP and SQL (MySQL) ?
Sorry for my english and, thanks in advance
i'm thinking that it could be done with a query, and the php code will only display the info and execute the queries for the pagination
the query might be something like:
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
FROM songs s LEFT JOIN albums a ON (s.Album_ID = a.Row_ID)
GROUP BY 1,2
ORDER BY 2 DESC,1
LIMIT 0,5; /* for the first page */
the idea is to use the IF()
function, whenever you have a conflict between the two tables (like displaying the song's name or the album's name) and the rest of the columns will have NULL as value, you could use php to change it (columns like "IsAlbum")
the rest is just php excecuting queries, displaying the results, having links to the next page, etc.
Good Luck
精彩评论