Ver Mensaje Individual
  #2 (permalink)  
Antiguo 11/11/2011, 11:27
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Uso de count en consulta con DISTINCT y UNION

Hola Pinchu...

No me quedó claro qué es lo que quieres hacer, sin embargo tengo que mencionarte algunos detalles de tu consulta. Al poner las últimas dos cláusulas

Código:
ORDER BY ultima_modificacion DESC
LIMIT 5
Estas afectan EL RESULTADO DE LA UNIÓN, no sólo la segunda consulta, checa este script:

Código MySQL:
Ver original
  1. mysql> CREATE TABLE TablaA (id INT, descripcion VARCHAR(10));
  2. Query OK, 0 rows affected (0.14 sec)
  3.  
  4. mysql> INSERT INTO TablaA VALUES (1, 'uno'), (2, 'dos'), (3, 'tres');
  5. Query OK, 3 rows affected (0.06 sec)
  6. Records: 3  Duplicates: 0  Warnings: 0
  7.  
  8. mysql> SELECT * FROM TablaA;
  9. +------+-------------+
  10. | id   | descripcion |
  11. +------+-------------+
  12. |    1 | uno         |
  13. |    2 | dos         |
  14. |    3 | tres        |
  15. +------+-------------+
  16. 3 rows in set (0.00 sec)
  17.  
  18. mysql> CREATE TABLE TablaB (id INT, descripcion VARCHAR(10));
  19. Query OK, 0 rows affected (0.08 sec)
  20.  
  21. mysql> INSERT INTO TablaB VALUES (4, 'cuatro'), (5, 'cinco'), (3, 'seis');
  22. Query OK, 3 rows affected (0.06 sec)
  23. Records: 3  Duplicates: 0  Warnings: 0
  24.  
  25. mysql> SELECT * FROM TablaB;
  26. +------+-------------+
  27. | id   | descripcion |
  28. +------+-------------+
  29. |    4 | cuatro      |
  30. |    5 | cinco       |
  31. |    3 | seis        |
  32. +------+-------------+
  33. 3 rows in set (0.00 sec)

Ahora bien, supongamos que ejecutas dos sentencias por separado:

Código MySQL:
Ver original
  1. mysql> SELECT id, descripcion FROM TablaA;
  2. +------+-------------+
  3. | id   | descripcion |
  4. +------+-------------+
  5. |    1 | uno         |
  6. |    2 | dos         |
  7. |    3 | tres        |
  8. +------+-------------+
  9. 3 rows in set (0.00 sec)
  10.  
  11. mysql> SELECT id, descripcion FROM TablaB LIMIT 2;
  12. +------+-------------+
  13. | id   | descripcion |
  14. +------+-------------+
  15. |    4 | cuatro      |
  16. |    5 | cinco       |
  17. +------+-------------+
  18. 2 rows in set (0.02 sec)

Observa que la primer consulta regresa 3 registros, mientras que la segunda regresa 2... si hacemos la unión de las dos consultas:

Código MySQL:
Ver original
  1. mysql> SELECT id, descripcion FROM TablaA
  2.     -> UNION
  3.     -> SELECT id, descripcion FROM TablaB LIMIT 2;
  4. +------+-------------+
  5. | id   | descripcion |
  6. +------+-------------+
  7. |    1 | uno         |
  8. |    2 | dos         |
  9. +------+-------------+
  10. 2 rows in set (0.02 sec)

El resultado NO SON 5 REGISTROS sólo dos (los marcados por la cláusula LIMIT)... en tu caso por lo tanto el resultado de la consulta siempre serían 5 registros. Para obtener los registros "completos" deberías hacer algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT id, descripcion FROM TablaA
  2.     -> UNION
  3.     -> (SELECT id, descripcion FROM TablaB LIMIT 2);
  4. +------+-------------+
  5. | id   | descripcion |
  6. +------+-------------+
  7. |    1 | uno         |
  8. |    2 | dos         |
  9. |    3 | tres        |
  10. |    4 | cuatro      |
  11. |    5 | cinco       |
  12. +------+-------------+
  13. 5 rows in set (0.00 sec)

Es decir, asociar la cláusula LIMIT SOLO A LA SEGUNDA CONSULTA. Lo mismo sucede con las funciones ORDER BY, GROUP BY, HAVING...

finalmente, si quieres saber el número total de registros de la unión, podrías hacer lo siguiente:

Código MySQL:
Ver original
  1. mysql> SELECT COUNT(*) FROM
  2.     -> (
  3.     -> SELECT id, descripcion FROM TablaA
  4.     -> UNION
  5.     -> (SELECT id, descripcion FROM TablaB LIMIT 2)) T;
  6. +----------+
  7. | COUNT(*) |
  8. +----------+
  9. |        5 |
  10. +----------+
  11. 1 row in set (0.00 sec)

Saludos y espero que te sirva de ayuda.
Leo