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

Contar los registros resultado de una consulta

Estas en el tema de Contar los registros resultado de una consulta en el foro de Mysql en Foros del Web. Hola a todos, Tengo una base de datos que mensualmente deberá agregar registros a una tabla si es que ya no fueron agregados en ese ...
  #1 (permalink)  
Antiguo 30/01/2010, 17:04
 
Fecha de Ingreso: julio-2008
Mensajes: 109
Antigüedad: 15 años, 8 meses
Puntos: 0
Pregunta Contar los registros resultado de una consulta

Hola a todos,

Tengo una base de datos que mensualmente deberá agregar registros a una tabla si es que ya no fueron agregados en ese mes y ese año.

Hago una consulta para ver si hay registros que que coincidan con el mes y año actual, pero no sé como decirle a la consulta INSERT con un IF que inserte los nuevos registros (cuotas) si la consulta anterior no arroja resultados.

...será que ya son muchas horas aquí que no me sale....

Gracias!!
  #2 (permalink)  
Antiguo 30/01/2010, 17:14
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: Contar los registros resultado de una consulta

Código MySQL:
Ver original 
Inserta los registros si no existe, y si existen los omite. Requiere que coincidan en el campo PK.
Código MySQL:
Ver original
  1. REPLACE INTO .... VALUES(...);
Inserta o reemplaza en una tabla. Requiere que haya coincidencia de PK para reemplazar.

Toda otra situación es mejor hacerla en un stored procedure con un segmento que diga algo así como:
Código MySQL:
Ver original
  1. DELIMITER $$
  2.  
  3. DROP PROCEDURE IF EXISTS `INSERTAR_VALOR` $$
  4. CREATE PROCEDURE `INSERTAR_VALOR`(
  5.     IN DESDE DATE,
  6.     IN HASTA DATE -- , y el resto de los valores por si se puede insertar.
  7.    )
  8.    IF (SELECT MAX(FECHA) FROM TABLA WHERE FECHA BETWEEN DESDE AND HASTA) IS NULL THEN
  9.       INSERT INTO TABLA VALUES(...)
  10.    END IF;
  11. END $$
  12.  
  13. DELIMITER ;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 30/01/2010, 17:33
 
Fecha de Ingreso: julio-2008
Mensajes: 109
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Contar los registros resultado de una consulta

Cita:
Iniciado por gnzsoloyo Ver Mensaje
IF (SELECT MAX(FECHA) FROM TABLA WHERE FECHA BETWEEN DESDE AND HASTA) IS NULL THEN
INSERT INTO TABLA VALUES(...)
END IF;
END $$

DELIMITER ;
esto es todo SQL? en realidad si supiera si es NULL ya estaría, pero el THEN debería hacerlo con un LOOP con PHP... o pasarle el valor null a una variable de PHP que evaluo para llenar la Tabla CUOTAS con el LOOP...
  #4 (permalink)  
Antiguo 30/01/2010, 17:52
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: Contar los registros resultado de una consulta

Eso es un Stored Procedure... En una rutina escrit en SQL y que debe estar cargada en la base de datos.
¿Sabes usar un Stored Procedure?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 31/01/2010, 07:07
 
Fecha de Ingreso: julio-2008
Mensajes: 109
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Contar los registros resultado de una consulta

No, no he trabajado con sp, pero lo estoy investigando. Me he dado cuenta que tengo que hacer algunos cambios en mi tabla de cuotas...

Muchas gracias por tu ayuda.
  #6 (permalink)  
Antiguo 31/01/2010, 12:17
 
Fecha de Ingreso: julio-2008
Mensajes: 109
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Contar los registros resultado de una consulta

Encontré esto: SELECT FOUND_ROWS(); peor no sé como pasarle el valor que me dá a php...

mi codigo dice asì:

//acá me fijo si ya se emitieron cuotas este mes:
$emision=mysql_query("SELECT SQL_CALC_FOUND_ROWS mes, año FROM emitir WHERE mes='$mesl' AND año='$ano'ORDER BY emision DESC;SELECT FOUND_ROWS();");

if($emision=0){ //si da cero quiere decir que hay que emitir este mes y entonces sigo con el código... pero no logro tomas el resultado de FOUND_ROWS();

Cuando ejecuto la consulta en phpmyadmin me da bien, pero cuando ejecuto el php no. No me emite las cuotas porque salta como que ya estan emitidas, o sea que FOUND_ROWS() no da cero, y eso no es así... no me está tomando la variable...

Probé de poner las consultas separadas pero entonces el FOUND_ROWS(); no evalua nada....

me queda esto y ya estaría todo!!

Gracias!
  #7 (permalink)  
Antiguo 31/01/2010, 16:33
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: Contar los registros resultado de una consulta

FOUND_ROWS() devuelve la cantidad de filas (registros) de la tabla, afectados (INSERT/UPDATE/DELETE) por la ejecución de la sentencia. Pero no evita tu problema original.
Sería mucho más simple que implementases lo que deseas en dos consultas por separado qu eintentar resolver todo en una sola, sin hacerlo en un stored procedure.
Haz una sentencia que consulte si el dato existe:
Código MySQL:
Ver original
  1. SELECT COUNT(*) cant
  2. FROM Tabla
  3. WHERE MONT(fecha) = MONTH(CURDATE()) AND YEAR(fecha) = YEAR(CURDATE());
Luego, si el valor devuelto por el único registro de la consulta es cero (0), recién entonces mandas a insertar la nueva cuota...
Vas a perder menos tiempo, y el resultado final sería igual que usando el SP que te propuse.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: contar, registros, resultados
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 07:16.