Hola PibeJava:
Hace tiempo discutía con algunos compañeros acerca de un problema similar, les propuse una solución que igual te puede servir. supongamos que tenemos la siguiente información:
Código MySQL:
Ver original+----------+------------+-------------+
| id_album | titulo | descripcion |
+----------+------------+-------------+
| 1 | Album Uno
| Desc Uno
| | 2 | Album Dos
| Desc Dos
| | 3 | Album Tres
| Desc Tres
| +----------+------------+-------------+
+---------+----------+---------+----------------+
| id_foto | id_album | titulo | descripcion |
+---------+----------+---------+----------------+
| 1 | 1 | Foto 1 | Foto 1-Album 1 |
| 2 | 1 | Foto 2 | Foto 2-Album 1 |
| 3 | 1 | Foto 3 | Foto 3-Album 1 |
| 4 | 2 | Foto 4 | Foto 1-Album 2 |
| 5 | 2 | Foto 5 | Foto 2-Album 2 |
| 6 | 2 | Foto 6 | Foto 3-Album 2 |
| 7 | 3 | Foto 7 | Foto 1-Album 3 |
| 8 | 3 | Foto 8 | Foto 2-Album 3 |
| 9 | 3 | Foto 9 | Foto 3-Album 3 |
| 10 | 3 | Foto 10 | Foto 4-Album 3 |
+---------+----------+---------+----------------+
10 rows
in set (0.01 sec
)
Supongamos ahora que queremos mostrar sólo las 2 primeras fotos para cada album. La idea es simular la función ROW_NUMBER de Oracle o SQL Server para numerar cada registro... hay muchas formas de hacerlo, pero para este ejemplo lo hacemos con un COUNT (más información en la liga):
http://www.artfulsoftware.com/infotree/queries.php#1098
de esta forma quedaría una consulta así:
Código MySQL:
Ver original -> fotos F2
ON F1.id_album
= F2.id_album
AND -> F1.id_foto >= F2.id_foto
+---------+----------+------------+
| id_foto | id_album | row_number |
+---------+----------+------------+
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 1 | 3 |
| 4 | 2 | 1 |
| 5 | 2 | 2 |
| 6 | 2 | 3 |
| 7 | 3 | 1 |
| 8 | 3 | 2 |
| 9 | 3 | 3 |
| 10 | 3 | 4 |
+---------+----------+------------+
10 rows
in set (0.03 sec
)
Con esta consulta, simplemente filtramos los registros que tengan un row_number > 2... al utilizar una función COUNT(*) lo podemos hacer con una sentencia HAVING COUNT(*) <= 2. El resto sería simplemente hacer los JOIN's, incluyendo esta nueva tabla para filtrar la información, es decir, algo como esto:
Código MySQL:
Ver original -> A.id_album, A.titulo, A.descripcion,
-> F.id_foto, F.titulo, F.descripcion
-> fotos F2
ON F1.id_album
= F2.id_album
AND -> F1.id_foto >= F2.id_foto
-> ON T.id_foto
= F.id_foto
AND T.id_album
= F.id_album
; +----------+------------+-------------+---------+--------+----------------+
| id_album | titulo | descripcion | id_foto | titulo | descripcion |
+----------+------------+-------------+---------+--------+----------------+
| 1 | Album Uno
| Desc Uno
| 1 | Foto
1 | Foto
1-Album
1 | | 1 | Album Uno
| Desc Uno
| 2 | Foto
2 | Foto
2-Album
1 | | 2 | Album Dos
| Desc Dos
| 4 | Foto
4 | Foto
1-Album
2 | | 2 | Album Dos
| Desc Dos
| 5 | Foto
5 | Foto
2-Album
2 | | 3 | Album Tres
| Desc Tres
| 7 | Foto
7 | Foto
1-Album
3 | | 3 | Album Tres
| Desc Tres
| 8 | Foto
8 | Foto
2-Album
3 | +----------+------------+-------------+---------+--------+----------------+
Observa que sólo te trae dos fotos por cada album, que creo que es lo que pretendes...
Sale un vistazo, creo que te puede servir. Si tienes problemas para entender alguna parte de la consulta me la comentas y lo vemos.
Saludos
Leo.