problema con funcion COUNT en mysql

CMaGNo

Lanero Regular
13 Ene 2005
48
EDITO: El problema es con la funcion MAX, no con COUNT.

Saludos laneros:

Estoy trabajando en mysql 5 (creo que es la 5.0.1) y estoy utilizando algunos triggers para realizar ciertas cosas que necesito. En uno de los triggers (trigger before insert) tengo una serie de instrucciones como:

Código:
	SET @c = 0;
	SELECT MAX(numero) INTO @c FROM tabla_x WHERE id_x = NEW.id_x GROUP BY id_x;
	SET NEW.numero = @c + 1;

La idea con lo anterior es que cada vez que se inserte un registro en la tabla X, se busque cual es el valor máximo del campo "numero" que tiene el id_x igual al id_x del registro que se esta insertando.

Si uso el mysql query browser para insertar registros, el trigger funciona de maravilla y hace lo que necesito, pero cuando lo hago desde mi programa Java (JSP) me saca un error si no existe al menos 1 registro con el valor de id_x especificado, es decir, cuando la instruccion "SELECT MAX ..." no retorna ningun registro. El error es el siguiente:

ERROR 1329 - No data - zero rows fetched, selected, or processed

Si quito la instruccion donde uso la funcion MAX, el programa no me da errores en ningun momento, pero no cumple lo que necesito.Tambien intente de la siquiente forma y el resultado fue exactamente el mismo ...

Código:
	SET @c = 0;
	SELECT MAX(numero) INTO @c FROM tabla_x WHERE id_x = NEW.id_x GROUP BY id_x;
	IF ISNULL(@c) THEN
		SET @c = 0;
	END IF;
	SET NEW.numero = @c + 1;

Algun lanero experto puede ayudarme?... como puedo tratar el caso especial cuando la instruccion SELECT no arroja ningun registro? .... o existe una mejor alternativa para lograr lo que deseo??

Muchas gracias de antemano!!
 
Pregunta...

#1
Para que el group? tu puedes utlizar MAX , MIN, COUNT en una consulta sin hacer group!!
"SELECT MAX(CAMPO) FROM TABLA WHERE CAMPOLLAVE = VALOR" y funciona!!!

#2

Estas llevando un consecutivo o solo queres saber el maximo????? te recomiendo crearle un indice a esto!!! para que o haga full_scan sobre la tabla!
 
Puedes crear el indice que te recomienda jpabloruiz, esto es para que no este leyendo toda la base y sea mas rapido.
 

Los últimos mensajes

Los últimos temas