Ver Mensaje Individual
  #8 (permalink)  
Antiguo 08/04/2016, 18:48
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: modificar consulta

Se entiende.
Releyendo tu problema, te comento que existe una solución, pero es bastante compleja. Necesita bastante experiencia usando variables de usuario de MySQL, y consultas anidadas.
Primero voy a recrear tus tres tablas, de acuerdo a como yo considero que deberían ser, y le agregaremos los datos:
Código MySQL:
Ver original
  1. mysql> DROP TABLE IF EXISTS foto;
  2. Query OK, 0 rows affected (0.05 sec)
  3.  
  4. mysql> DROP TABLE IF EXISTS galeria;
  5. Query OK, 0 rows affected (0.03 sec)
  6.  
  7. mysql> DROP TABLE IF EXISTS categoria;
  8. Query OK, 0 rows affected (0.03 sec)
  9.  
  10. mysql>
  11. mysql> CREATE TABLE IF NOT EXISTS categoria(
  12.     ->     idcategoria INT UNSIGNED NOT NULL PRIMARY KEY,
  13.     ->     nombre_categoria VARCHAR(100)
  14.     -> );
  15. Query OK, 0 rows affected (0.05 sec)
  16.  
  17. mysql> CREATE TABLE IF NOT EXISTS galeria (
  18.     ->     idgaleria INT UNSIGNED NOT NULL PRIMARY KEY,
  19.     ->     titulo VARCHAR(200) NOT NULL,
  20.     ->     fecha_alta DATETIME NOT NULL,
  21.     ->     descripcion VARCHAR(100),
  22.     ->     idcategoria INT UNSIGNED,
  23.     ->     CONSTRAINT fk_categoria FOREIGN KEY (idcategoria)
  24.     ->         REFERENCES categoria (idcategoria)
  25.     -> );
  26. Query OK, 0 rows affected (0.05 sec)
  27.  
  28. mysql> CREATE TABLE IF NOT EXISTS foto (
  29.     ->     nombre_foto VARCHAR(100),
  30.     ->     archivo VARCHAR(100) NOT NULL,
  31.     ->     posicion INT UNSIGNED NOT NULL,
  32.     ->     estado VARCHAR(20) NOT NULL,
  33.     ->     idgaleria INT UNSIGNED,
  34.     ->     CONSTRAINT fk_galeria FOREIGN KEY (idgaleria)
  35.     ->         REFERENCES galeria (idgaleria)
  36.     -> );
  37. Query OK, 0 rows affected (0.03 sec)
  38.  
  39. mysql> INSERT INTO categoria VALUES(1, 'RETRATO'), (2, 'MODA'), (3, 'INFANTILES');
  40. Query OK, 3 rows affected (0.03 sec)
  41. Records: 3  Duplicates: 0  Warnings: 0
  42.  
  43. mysql>
  44. mysql> INSERT INTO galeria
  45.     -> VALUES(1, 'Retrato 1', '2016-03-04', 'Descripcion R1', 1),
  46.     -> (2, 'Retrato 2', '2016-03-04', 'Descripcion R2', 1),
  47.     -> (3, 'Retrato 3', '2016-03-04', 'Descripcion R3', 1),
  48.     -> (4, 'Moda 1', '2016-03-04', 'Descripcion M1', 2),
  49.     -> (5, 'Moda 2', '2016-03-04', 'Descripcion M2', 2),
  50.     -> (6, 'Infantiles 1', '2016-03-04', 'Descripcion I1', 3),
  51.     -> (7, 'Infantiles 2', '2016-03-04', 'Descripcion I2', 3);
  52. Query OK, 7 rows affected (0.02 sec)
  53. Records: 7  Duplicates: 0  Warnings: 0
  54.  
  55. mysql>
  56. mysql>
  57. mysql> INSERT INTO foto(nombre_foto, archivo, posicion, estado, idgaleria)
  58.     -> VALUES
  59.     -> ('foto_abuelos_1', 'lkgiuytyug.jpg', 1, 'visible', 1),
  60.     -> ('foto_abuelos_2', 'dshdsg.jpg', 2, 'visible', 1),
  61.     -> ('foto_abuelos_3', 'brgthyvxc.jpg', 3, 'visible', 1),
  62.     -> ('foto_abuelos_4', 'fwebnyjuy.jpg', 4, 'visible', 1),
  63.     -> ('foto_abuelos_5', 'weryhbcv.jpg', 5, 'visible', 1),
  64.     -> ('foto_novia_1', 'etuyhgfscv.jpg', 1, 'visible', 2),
  65.     -> ('foto_novia_2', 'xbxrth.jpg', 2, 'visible', 2),
  66.     -> ('foto_novia_3', 'oijhgvcxd.jpg', 3, 'visible', 2),
  67.     -> ('foto_novia_4', 'edfvbnjh.jpg', 4, 'visible', 2),
  68.     -> ('foto_novia_5', 'dertgbjuh.jpg', 5, 'visible', 2),
  69.     -> ('foto_maquillaje_1', 'dertghj.jpg', 1, 'visible', 3),
  70.     -> ('foto_maquillaje_2', 'jhgfd.jpg', 2, 'visible', 3),
  71.     -> ('foto_maquillaje_3', 'uytrdcv.jpg', 3, 'visible', 3),
  72.     -> ('foto_maquillaje_4', 'okjhbvd.jpg', 4, 'visible', 3),
  73.     -> ('foto_maquillaje_5', 'dfghuytrfd.jpg', 5, 'visible', 3),
  74.     -> ('vestidonoche_1', 'iuytfv.jpg', 1, 'visible', 4),
  75.     -> ('vestidonoche_2', 'sedrtyhb.jpg', 2, 'visible', 4),
  76.     -> ('vestidonoche_3', 'werghbvcx.jpg', 3, 'visible', 4),
  77.     -> ('vestidonoche_4', 'mhyuytfd.jpg', 4, 'visible', 4),
  78.     -> ('vestidonoche_5', 'wswert5.jpg', 5, 'visible', 4),
  79.     -> ('bikini_1', 'dertgbjuh.jpg', 1, 'visible', 5),
  80.     -> ('bikini_2', '234rtgvcxcv.jpg', 2, 'visible', 5),
  81.     -> ('bikini_3', 'gfdsw23456.jpg', 3, 'visible', 5),
  82.     -> ('bikini_4', 'gtyui76ytr.jpg', 4, 'visible', 5),
  83.     -> ('bikini_5', 'de345678iujhgfd.jpg', 5, 'visible', 5),
  84.     -> ('foto_bebe_1', 'sdfghyu765.jpg', 1, 'visible', 6),
  85.     -> ('foto_bebe_2', 'ew4456ygfc.jpg', 2, 'visible', 6),
  86.     -> ('foto_bebe_3', 'fghjuhgfde.jpg', 3, 'visible', 6),
  87.     -> ('foto_bebe_4', 's34567yuhg.jpg', 4, 'visible', 6),
  88.     -> ('foto_bebe_5', 'loi8765trews.jpg', 5, 'visible', 6),
  89.     -> ('foto_recien_nacido_1', 'fr54567u.jpg', 1, 'visible', 7),
  90.     -> ('foto_recien_nacido_2', 'bnhju7ytrfdcvb.jpg', 2, 'visible', 7),
  91.     -> ('foto_recien_nacido_3', 'bnjiuytfds.jpg', 3, 'visible', 7),
  92.     -> ('foto_recien_nacido_4', 'werthjnbv.jpg', 4, 'visible', 7),
  93.     -> ('foto_recien_nacido_5', 'ethrfndgn.jpg', 5, 'visible', 7);
  94. Query OK, 35 rows affected (0.03 sec)
  95. Records: 35  Duplicates: 0  Warnings: 0

Luego ejecutamos la consulta:
Código MySQL:
Ver original
  1. mysql> SELECT
  2.     ->     idcategoria,
  3.     ->     nombre_categoria,
  4.     ->     idgaleria,
  5.     ->     titulogaleria,
  6.     ->     date_format(fecha, '%d/%m/%Y') fecha,
  7.     ->     descripcion,
  8.     ->     archivo
  9.     -> FROM
  10.     ->     (SELECT
  11.     ->         idcategoria,
  12.     ->             nombre_categoria,
  13.     ->             idgaleria,
  14.     ->             titulogaleria,
  15.     ->             fecha,
  16.     ->             descripcion,
  17.     ->             archivo,
  18.     ->             IF(@idg <> idgaleria, @id:=1, @id:=@id + 1) s1,
  19.     ->             IF(@idg <> idgaleria, @idg:=idgaleria, @idg) s2
  20.     ->     FROM
  21.     ->         (SELECT
  22.     ->         idcategoria,
  23.     ->             nombre_categoria,
  24.     ->             idgaleria,
  25.     ->             titulogaleria,
  26.     ->             fecha,
  27.     ->             descripcion,
  28.     ->             archivo
  29.     ->     FROM
  30.     ->         (SELECT
  31.     ->         ca.idcategoria,
  32.     ->             ca.nombre_categoria,
  33.     ->             ga.idgaleria,
  34.     ->             ga.titulo titulogaleria,
  35.     ->             ga.fecha_alta fecha,
  36.     ->             ga.descripcion,
  37.     ->             fo.archivo
  38.     ->     FROM
  39.     ->         galeria ga
  40.     ->     JOIN (SELECT @id:=0, @idg:=0) t1
  41.     ->     INNER JOIN categoria ca ON ga.idcategoria = ca.idcategoria
  42.     ->     LEFT JOIN foto fo ON ga.idgaleria = fo.idgaleria) lvl1
  43.     ->     ORDER BY RAND()) lvl2
  44.     ->     ORDER BY idgaleria) lvl3
  45.     -> WHERE
  46.     ->     s1 IN (1 , 2)
  47.     -> ;

Obteniendo este resultado:
Código MySQL:
Ver original
  1. +-------------+------------------+-----------+---------------+------------+----------------+--------------------+
  2. | idcategoria | nombre_categoria | idgaleria | titulogaleria | fecha      | descripcion    | archivo            |
  3. +-------------+------------------+-----------+---------------+------------+----------------+--------------------+
  4. |           1 | RETRATO          |         1 | Retrato 1     | 04/03/2016 | Descripcion R1 | brgthyvxc.jpg      |
  5. |           1 | RETRATO          |         1 | Retrato 1     | 04/03/2016 | Descripcion R1 | weryhbcv.jpg       |
  6. |           1 | RETRATO          |         2 | Retrato 2     | 04/03/2016 | Descripcion R2 | dertgbjuh.jpg      |
  7. |           1 | RETRATO          |         2 | Retrato 2     | 04/03/2016 | Descripcion R2 | oijhgvcxd.jpg      |
  8. |           1 | RETRATO          |         3 | Retrato 3     | 04/03/2016 | Descripcion R3 | dfghuytrfd.jpg     |
  9. |           1 | RETRATO          |         3 | Retrato 3     | 04/03/2016 | Descripcion R3 | uytrdcv.jpg        |
  10. |           2 | MODA             |         4 | Moda 1        | 04/03/2016 | Descripcion M1 | iuytfv.jpg         |
  11. |           2 | MODA             |         4 | Moda 1        | 04/03/2016 | Descripcion M1 | werghbvcx.jpg      |
  12. |           2 | MODA             |         5 | Moda 2        | 04/03/2016 | Descripcion M2 | gfdsw23456.jpg     |
  13. |           2 | MODA             |         5 | Moda 2        | 04/03/2016 | Descripcion M2 | gtyui76ytr.jpg     |
  14. |           3 | INFANTILES       |         6 | Infantiles 1  | 04/03/2016 | Descripcion I1 | ew4456ygfc.jpg     |
  15. |           3 | INFANTILES       |         6 | Infantiles 1  | 04/03/2016 | Descripcion I1 | s34567yuhg.jpg     |
  16. |           3 | INFANTILES       |         7 | Infantiles 2  | 04/03/2016 | Descripcion I2 | bnhju7ytrfdcvb.jpg |
  17. |           3 | INFANTILES       |         7 | Infantiles 2  | 04/03/2016 | Descripcion I2 | ethrfndgn.jpg      |
  18. +-------------+------------------+-----------+---------------+------------+----------------+--------------------+
  19. 14 rows in set (0.02 sec)
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)