2011-04-05 20 views
5

Tengo una tabla de canciones, algunas canciones son canciones del álbum, y algunos son sencillos ... Y tengo una tabla de álbumes ...¿Necesita ayuda con PHP y MySQL

Ejemplo:

si el ID de disco es [nula], significa que la canción es una sola

canciones Tabla:

+--------+---------+-----------+----------------+---------+---------------+-------+--------+--------+------+-------+-------+----------+ 
| 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  | 
+--------+---------+-----------+----------------+---------+---------------+-------+--------+--------+------+-------+-------+----------+ 

álbumes Tabla:

+--------+-----------+----------------+---------+---------------+-------------------+--------+-------+----------+ 
| 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 | 
+--------+-----------+----------------+---------+---------------+-------------------+--------+-------+----------+ 

y si quiero tomar solamente los últimos cinco discos y/o solteros lo que significa el resultado será (ordenado del más reciente al más viejo):

por la columna 'nombre' quiero decir el nombre individual o nombre del álbum'

Página 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 | 
+-----------------+---------+-----------------+-------------------+----------+-----------+--------+--------+------+-------+----------+-------+ 

y si quiero tomar sólo la última de cinco después de los últimos cinco (los que están en la tabla anterior) álbumes y/o individuales, el resultado será ordenado de último a mayor):

Página 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 | 
+-----------------+---------+-----------------+-------------------+----------+-----------+--------+--------+------+-------+----------+-------+ 

y los cinco delante de ellos serán:

Página 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 | 
+-----------------+---------+-----------------+-------------------+----------+-----------+--------+--------+------+-------+----------+-------+ 

y los cinco antes:

Página 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 | 
+-----------------+---------+-----------------+-------------------+----------+-----------+--------+--------+------+-------+----------+-------+ 

Y en la última mesa (o página):

Página 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 | - | 
+-----------------+---------+-----------------+-------------------+----------+-----------+--------+--------+------+-------+----------+-------+ 

Pero, el problema es que cuando lo haga que la X y la Y en "LIMIT X, Y" ganado 't ser X = 0, y = 5 o X = 5, y = 5 o X = 10, y = 5 y así sucesivamente ...

por lo tanto, mi pregunta es: ¿cómo puedo hacer lo que hice arriba en PHP y SQL (MySQL)?


Lo siento por mi inglés y, gracias por adelantado

+0

'X = 5, Y = 10' ¿verdad? ¿Es eso un error tipográfico? – Shoe

+3

Muestra tu código por favor. – Shoe

+2

No estoy seguro de que podría haber hecho esto más confuso si lo hubiera intentado. muestra tu SQL. – JNK

Respuesta

3

Usted está recibiendo las cláusulas LIMIT mal. es OFFSET,QUANTITY. Las consultas de muestra obtienen 5 registros a la vez, por lo que la CANTIDAD sería 5 en todo momento, e incrementaría la compensación en 5 para cada "página" de resultados.

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

Fue un error de tipeo, quise decir: 0,5 o 5,5 o 10,5 ... Pero eso no funcionan, porque quiero que el resultado (de la tabla de canciones) sea: los álbumes distintos + los singles no distintos (ya que todos los solteros tienen el mismo "álbum" que es [nulo]) ... Mira los ejemplos de las tablas de resultados ... – Andy

+1

Teniendo en cuenta que tienes dos consultas incompatibles, probablemente quieras hacer dos se perate las consultas, únelas, luego seleccione de ese resultado y haga el pedido/limitación en esa consulta principal/externa. –

+0

Esta confusión es una buena razón para defender 'LIMIT x OFFSET y' en lugar de' LIMIT y, x'. – staticsan

0

Aquí está mi apuñalamiento rápido a su pregunta, pero estoy haciendo grandes suposiciones.

Creo que desea todos los álbumes y sencillos enumerados en el orden de lanzamiento y desea mostrar 5 por "página". Suponiendo que, esta consulta debería funcionar. A largo plazo, convertiría esto en una vista.

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 

Entonces, empezando por 0, incrementar X en la consulta anterior por 5 en cada página.

+0

sí, me entendiste bien, pero eso no funcionará si quiero que un álbum o una sola se muestren en una sola página, en el ejemplo que di más arriba en "página" 1 hay dos álbumes y tres canciones, y estas son 6 filas en la tabla de canciones y en "página" 4 hay otros dos álbumes y otras tres canciones, y estas son 9 filas en la tabla de canciones, así que no puedo simplemente aumentar X por 5 porque cada la página obtiene filas más o menos de 5 ... – Andy

+0

Estás sobrecomplicando mi respuesta. La consulta anterior solo devuelve canciones y álbumes nulos. No importa si un álbum tiene 14 canciones o 3. Esta consulta devolverá los álbumes y singles (canciones sin álbum) en orden de lanzamiento limitado y compensado por sus necesidades. –

+0

Aparece el error: "# 1248 - ¿Cada tabla derivada debe tener su propio alias"? – Andy

Cuestiones relacionadas