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

Como puedo realizar una consulta cruzada entre dos tablas?

Estas en el tema de Como puedo realizar una consulta cruzada entre dos tablas? en el foro de Mysql en Foros del Web. Bien, tengo una duda y agradeceré enormemente a quien pueda ayudarme... necesito realizar lo siguiente: Contar el total de registros de una vista (o tabla, ...
  #1 (permalink)  
Antiguo 03/08/2012, 15:58
 
Fecha de Ingreso: agosto-2012
Mensajes: 39
Antigüedad: 11 años, 9 meses
Puntos: 5
Pregunta Como puedo realizar una consulta cruzada entre dos tablas?

Bien, tengo una duda y agradeceré enormemente a quien pueda ayudarme...

necesito realizar lo siguiente:

Contar el total de registros de una vista (o tabla, en mi caso ya es una vista):

Código SQL:
Ver original
  1. SELECT COUNT(*) FROM vista_general_personas

el resultado de ese count lo quiero combinar o cruzar como se interprete una segunda consulta, del tipo:

SELECT * FROM vista_general_personas LIMIT 30 OFFSET (resultadocount)-30

he pasado por separado las consultas desde PHP y si me funciona, pero es una consulta muy lenta, porque estoy evaluando arriba de 140mil registros y ésta sigue creciendo cada día, lo que necesito es mostrar los últimos 30 registros de la base de datos a manera de resumen en una página, pero hacer un clásico ORDER BY id DESC Limit 30 consume mucho tiempo y deseo optimizarlo, hice algunas pruebas desde PHP y me funciona como ya lo mencioné, pero ahora quiero hacer un SP o una Función que viva en el servidor, para ello buscando información trataba de hacer lo siguiente:


Código SQL:
Ver original
  1. DELIMITER $$
  2. DROP FUNCTION IF EXISTS totales $$
  3. CREATE FUNCTION totales()
  4. BEGIN
  5.     DECLARE t INT;
  6.     SELECT COUNT(*) INTO t FROM vista_general_personas;
  7.  
  8. SET @valor = t - 30;   
  9. SELECT * FROM vista_general_personas LIMIT 30 OFFSET valor;
  10.  
  11. END $$
  12. DELIMITER ;

pero no lo pude hacer funcionar, se que debe estar mal, pero no se como solucionarlo, agradecería su apoyo a cualquiera que pudiera apoyarme, muchas gracias.
  #2 (permalink)  
Antiguo 03/08/2012, 18:03
 
Fecha de Ingreso: marzo-2010
Ubicación: df
Mensajes: 58
Antigüedad: 14 años, 1 mes
Puntos: 5
Respuesta: Como puedo realizar una consulta cruzada entre dos tablas?

Hola!

Yo lo haria así:

Código MySQL:
Ver original
  1. use test;
  2.  
  3. drop table if exists vista_general_personas;
  4.  
  5. create table vista_general_personas (id int);
  6.  
  7. insert into vista_general_personas values (1),(2),(3),(4),(5),(6),(7),(8),(9);
  8.  
  9.  
  10. DELIMITER $$
  11.  
  12. CREATE PROCEDURE totales()
  13.  
  14.  
  15.     DECLARE t INT;
  16.  
  17.     DECLARE valor INT DEFAULT 0;
  18.  
  19.     SELECT count(*) INTO t FROM vista_general_personas;
  20.  
  21.     SET valor = t - 2;  
  22.  
  23.     SELECT * FROM vista_general_personas LIMIT  valor;
  24.    
  25. END $$
  26. DELIMITER ;
  27.  
  28. call totales();

Saludos!

-------------------------------------------------------------------------------------
Workbench de MySql es un super programa que te hace la vidad mas bonita
__________________
Dead Nation
  #3 (permalink)  
Antiguo 03/08/2012, 18:06
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, 5 meses
Puntos: 2658
Respuesta: Como puedo realizar una consulta cruzada entre dos tablas?

Buena la intención, pollin14, pero hay un problema: LIMIT no admite uso de variables. Tienen que ser valores enteros reales.
Para usar variables hay que implementar la consulta con sentencias preparadas (ver manual de referencia)
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 03/08/2012, 18:26
 
Fecha de Ingreso: marzo-2010
Ubicación: df
Mensajes: 58
Antigüedad: 14 años, 1 mes
Puntos: 5
Respuesta: Como puedo realizar una consulta cruzada entre dos tablas?

Pero yo probe el script que puese y si me funciona.
Voy a checar el manual de referencia.
__________________
Dead Nation
  #5 (permalink)  
Antiguo 03/08/2012, 18:53
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, 5 meses
Puntos: 2658
Respuesta: Como puedo realizar una consulta cruzada entre dos tablas?

Cita:
La cláusula LIMIT puede usarse para restringir el número de registros retornados por el comando SELECT. LIMIT tiene uno o dos argumentos numéricos, que deben ser enteros positivos (incluyendo cero).

Con dos argumentos, el primer argumento especifica el desplazamiento del primer registro a retornar. El desplazamiento del registro inicial es 0 (no 1):
Código MySQL:
Ver original
  1. mysql> SELECT * FROM table LIMIT 5,10;  # Retrieve rows 6-15

Por compatibilidad con PostgreSQL, MySQL también soporta la sintaxis LIMIT row_count OFFSET offset.
Si es posible si usas MySQL 5.5.6 o superior:
Cita:
The LIMIT clause can be used to constrain the number of rows returned by the SELECT statement. LIMIT takes one or two numeric arguments, which must both be nonnegative integer constants, with these exceptions:
  • Within prepared statements, LIMIT parameters can be specified using ? placeholder markers.
  • Within stored programs, LIMIT parameters can be specified using integer-valued routine parameters or local variables as of MySQL 5.5.6.
SI el server es anterior, no funcionará.
Son cambios introducidos hace poco, por eso no funcionarán bien en todos los hosting, por ejemplo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 04/08/2012, 08:26
 
Fecha de Ingreso: agosto-2012
Mensajes: 39
Antigüedad: 11 años, 9 meses
Puntos: 5
Respuesta: Como puedo realizar una consulta cruzada entre dos tablas?

muchas gracias por sus respuestas, le daré una leída al manual, entiendo la verdad ando verde en el asunto de SP, Funciones y demás, espero poder encontrar la respuesta a lo que necesito y ya les avisaré muchas gracias por sus comentarios,

Aprovechando, es un servidor windows al cual tengo acceso por tanto no hay mucho problemas en el asunto de las versiones y sobre todo, que ya hice algunas pruebas con ejemplos que encontré y soporta todo lo mencionado aquí.
  #7 (permalink)  
Antiguo 04/08/2012, 08:39
 
Fecha de Ingreso: agosto-2012
Mensajes: 39
Antigüedad: 11 años, 9 meses
Puntos: 5
Respuesta: Como puedo realizar una consulta cruzada entre dos tablas?

por ahora con el código de @pollin14 obtengo el siguiente error:

Cita:
SQL Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'valor;

END' at line 13
  #8 (permalink)  
Antiguo 04/08/2012, 08:54
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, 5 meses
Puntos: 2658
Respuesta: Como puedo realizar una consulta cruzada entre dos tablas?

¿Y qué versión de MySQL usas?
No te olvides lo que mencioné: Sólo funcionará si usas MySQL 5.5.6 o superior.
__________________
¿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 04/08/2012, 09:08
 
Fecha de Ingreso: agosto-2012
Mensajes: 39
Antigüedad: 11 años, 9 meses
Puntos: 5
Respuesta: Como puedo realizar una consulta cruzada entre dos tablas?

5.1.x... disculpa se me pasó validar ese pequeño detalle, le daré un upgrade a mi servidor y les contaré que sucedió. muchas gracias por confirmar el dato gnzsoloyo

Etiquetas: funcion, procedure, store
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 22:12.