Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

unificar dos consultas

Estas en el tema de unificar dos consultas en el foro de Mysql en Foros del Web. hoy por hoy realizo dos consultas uso count() para contar la cantidad de registos que tiene la tabla uso limit para limitar la impresión de ...
  #1 (permalink)  
Antiguo 12/12/2013, 17:25
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 9 meses
Puntos: 1012
unificar dos consultas

hoy por hoy realizo dos consultas
  • uso count() para contar la cantidad de registos que tiene la tabla
  • uso limit para limitar la impresión de registros

tengo una tabla con 100 filas y quiero obtener el número de registros totales de la tabla (100) y al mismo tiempo mostrar los primeros 20

es posible hacerlo en una sola consulta??

gracias
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #2 (permalink)  
Antiguo 12/12/2013, 17:53
Avatar de skiper0125  
Fecha de Ingreso: octubre-2010
Ubicación: $this->Mexico('Toluca');
Mensajes: 1.127
Antigüedad: 13 años, 5 meses
Puntos: 511
Respuesta: unificar dos consultas

Hola que tal.

Los primero que se me ocurre es que hagas una subconsulta de la siguiente manera

Código SQL:
Ver original
  1. SELECT *, (SELECT COUNT(*) FROM tu_tabla) AS totalRegistros FROM tu_tabla LIMIT 20

Comena los resultados y espero te sirva.

Saludos
__________________
Recuerda que estamos aquí para orientarte, y no para hacer tu trabajo.
Si mi aporte fue de ayuda, recuerda que agradecer no cuesta nada +1

Skiper0125
  #3 (permalink)  
Antiguo 13/12/2013, 02:25
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años
Puntos: 574
Respuesta: unificar dos consultas

Yo seguiria con las dos consultas. Mas que nada por que seguramente despues de las 20 primeras filas querras mostrar las 20 siguientes, luego si cada vez le pides que cuente todos los registros.... en la solución anterior se contaran 20 veces...

Para que usas ese count(*)?
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 13/12/2013 a las 02:37
  #4 (permalink)  
Antiguo 13/12/2013, 06:54
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 9 meses
Puntos: 1012
Respuesta: unificar dos consultas

gracias skiper0125, me ha servido.

quimfv, entiendo lo que comentas. pero de una manera u otra necesito obtener ese valor tantas veces como sea necesario. el punto es que estoy mejorando un código que publiqué aquí (infinite scroll)
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #5 (permalink)  
Antiguo 13/12/2013, 07:47
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años
Puntos: 574
Respuesta: unificar dos consultas

IsaBelM entiendo pero esa consulta con esa subconsulta es muy ineficiente. Cuando digo que se calcula 20 veces no me refiero a 20 paginas si no a los 20 registros por el numero de paginas que tengas. Es decir para mostrar un registro debe leer toda la tabla para saber quantos tiene y lo va a hacer para cada registro que quieras mostrar.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #6 (permalink)  
Antiguo 13/12/2013, 09:24
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 9 meses
Puntos: 1012
Respuesta: unificar dos consultas

me estás diciendo que la subconsulta se va a ejecutar, por seguir con los valores expuestos anteriormente, 20 veces a cada petición que se haga??
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #7 (permalink)  
Antiguo 13/12/2013, 09:30
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 6 meses
Puntos: 397
Respuesta: unificar dos consultas

Claro, por esa razón es ineficiente, ya que por cada nuevo registro lo que hace MySql es llenar cada columna con el registro pertinente. Y como una de esas columnas tiene otra subconsulta lo que hace es ejecutarla. Igual, como ya te han dicho, no hay nada de malo tener las dos consultas por separado.

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #8 (permalink)  
Antiguo 13/12/2013, 10:13
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: unificar dos consultas

Si quieres, puedes meter todo en un solo SP, donde por un lado obtengas la tabla resultado, y por el otro, un parámetro de salida con el valor del count.
De ese modo haces una sola llamada y se ejecutan dos consultas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 13/12/2013, 10:48
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: unificar dos consultas

Para evitar la subconsulta hay otra opción para el SELECT, me refiero a
SQL_CALC_FOUND_ROWS
Un ejemplo:

Pero pienso como Quimfv y Gnzsoloyo, lo mejor es hacer las consultas por separado, y si quieres hacer una llamada, con un SP. He leído que hacer las dos consultas es en ocasiones hasta 10 veces más rápido.
sobre la discusión acerca de SQL_CALC_FOUND_ROWS puedes leer aquí
http://www.mysqlperformanceblog.com/...lc_found_rows/
  #10 (permalink)  
Antiguo 13/12/2013, 11:01
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años
Puntos: 574
Respuesta: unificar dos consultas

Lo dicho...
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #11 (permalink)  
Antiguo 13/12/2013, 15:49
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 9 meses
Puntos: 1012
Respuesta: unificar dos consultas

jonni09lo, gracias por ratificarlo

gnzsoloyo, leeré sobre los procesos almacenados

jurena, eso es justamente lo que hago. puedes verlo en la liga que dejé en mi segundo post

agradezco a todos vuestra participación.

un saludo
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #12 (permalink)  
Antiguo 14/12/2013, 04:57
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: unificar dos consultas

Perdona, IsaBelM, no vi el enlace. Si no quieres usar SQL_CALC_FOUND_ROWS, podrías usar algo parecido a este stored procedure

Código MySQL:
Ver original
  1. DELIMITER ;;
  2. CREATE PROCEDURE todos_y_tot()
  3.     DECLARE tot INT;
  4.     SET tot = 0;
  5.  
  6.     SELECT COUNT(*) total FROM tutabla LIMIT 1 INTO tot;
  7.  
  8.     SELECT *, tot FROM tutabla;
  9. END;;
  10. DELIMITER ;

Y luego lo llamas

Código MySQL:
Ver original
  1. CALL todos_y_tot;

Si todavía piensas que podría interesarte SQL_CALC_FOUND_ROWS, mira aquí
http://stackoverflow.com/questions/2...rows-and-total

Última edición por jurena; 15/12/2013 a las 02:51

Etiquetas: registro, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:04.