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

funcion, trigger, procedimiento...

Estas en el tema de funcion, trigger, procedimiento... en el foro de Mysql en Foros del Web. Buenas compañeros, suelo leer bastante el foro para resolver dudas aunque esta vez no he tenido más remedio que preguntar porque estoy completamente perdido y ...
  #1 (permalink)  
Antiguo 05/04/2013, 11:38
Avatar de Th3rm0  
Fecha de Ingreso: abril-2013
Ubicación: Sevilla
Mensajes: 7
Antigüedad: 11 años
Puntos: 0
funcion, trigger, procedimiento...

Buenas compañeros, suelo leer bastante el foro para resolver dudas aunque esta vez no he tenido más remedio que preguntar porque estoy completamente perdido y los apuntes que tengo están regular.

Tengo una base de datos con una serie de tablas: usuarios, descargas, media y me piden lo siguiente.

a) Función que calcule el número de archivos reproducidos por un
usuario.
b) Trigger que al eliminar un usuario, lo de alta en una nueva tabla de
histórico con los campos id_historico, fecha_alta, fecha_baja e
id_usuario.
c) Procedimiento que borre las reproducciones que hayan durado menos
de un cierto porcentaje de su tiempo total. Dicho porcentaje se recibirá
como argumento.
d) Evento que cada mes elimine las descargas realizadas en el mes
anterior.

Creo que todo es abusar un poco pero os pediria que me ayudarais al menos con el punto A)

Para contar el numero de registros repetidos he pensado que necesito usar select count. He probado con la siguiente consulta para tratar de contar cuantas veces aparece cada usuario pero veo que estoy bastante equivocado.

select usuario, count(usuario) from descargas;

Me muestra tan solo el primer nombre de usuario y el total de registros que hay

Una vez que consiga que el resultado de la consulta este bien me pondre con el siguiente paso que es meterlo dentro del create function...

Muchas gracias de antemano.
  #2 (permalink)  
Antiguo 05/04/2013, 11:46
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: funcion, trigger, procedimiento...

Hola Th3rm0:

Dale un repaso a tus apuntes, porque esta consulta es básica. Olvidaste incluir la cláusula GROUP BY, como lo dices, cuando no colocas esta cláusula, te entrega el total de registros que cumplan la condición que pongas (en tu caso, como tampoco colocas WHERE te cuenta todos los registros de tu tabla).

Código MySQL:
Ver original
  1. SELECT usuario, COUNT(usuario)
  2. FROM descargas
  3. GROUP BY usuario;

Saludos
Leo.
  #3 (permalink)  
Antiguo 05/04/2013, 12:01
Avatar de Th3rm0  
Fecha de Ingreso: abril-2013
Ubicación: Sevilla
Mensajes: 7
Antigüedad: 11 años
Puntos: 0
Respuesta: funcion, trigger, procedimiento...

Cita:
Iniciado por leonardo_josue Ver Mensaje
Hola Th3rm0:

Dale un repaso a tus apuntes, porque esta consulta es básica. Olvidaste incluir la cláusula GROUP BY, como lo dices, cuando no colocas esta cláusula, te entrega el total de registros que cumplan la condición que pongas (en tu caso, como tampoco colocas WHERE te cuenta todos los registros de tu tabla).

Código MySQL:
Ver original
  1. SELECT usuario, COUNT(usuario)
  2. FROM descargas
  3. GROUP BY usuario;

Saludos
Leo.
Muchas gracias Leo, llegue a probar usando group by al principio pero algo debi hacer mal para que no me lo mostrara bien.

¿Para crear la funcion seria asi?

Código MySQL:
Ver original
  1. ()
  2. return (
  3. select usuario, count (usuario)
  4. from descargas
  5. group by usuario);

Gracias de nuevo.
  #4 (permalink)  
Antiguo 05/04/2013, 12:30
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: funcion, trigger, procedimiento...

Hola de nuevo:

Observa lo que dice el enunciado:

Cita:
a) Función que calcule el número de archivos reproducidos por un
usuario.
lo que requieres es obtener los datos de UN USUARIO, no de todos los usuarios. Por lo tanto debes enviar como parámetro de qué usuario se trata y agregar un filtro (WHERE) a tu consulta. Te recuerdo que una función DEBE REGRESAR FORZOSAMENTE UN VALOR, en este caso el total de archivos del usuario...

Haz la prueba y nos comentas.

Saludos
Leo.
  #5 (permalink)  
Antiguo 05/04/2013, 14:11
Avatar de Th3rm0  
Fecha de Ingreso: abril-2013
Ubicación: Sevilla
Mensajes: 7
Antigüedad: 11 años
Puntos: 0
Respuesta: funcion, trigger, procedimiento...

Cita:
Iniciado por leonardo_josue Ver Mensaje
Hola de nuevo:

Observa lo que dice el enunciado:



lo que requieres es obtener los datos de UN USUARIO, no de todos los usuarios. Por lo tanto debes enviar como parámetro de qué usuario se trata y agregar un filtro (WHERE) a tu consulta. Te recuerdo que una función DEBE REGRESAR FORZOSAMENTE UN VALOR, en este caso el total de archivos del usuario...

Haz la prueba y nos comentas.

Saludos
Leo.
¿Te refieres a que necesitaría un formulario que me pida introducir el nombre de usuario verdad? ¿Y en la funcion faltaria el return que seria donde apareceria dicho resultado no?

Me habia puesto con el apartado del trigger a ver que te parece.

Create table usuarios_historicos(
Id_historico int not null auto_increment,
Fecha_alta datetime,
Fecha_baja datetime,
Id_usuario varchar(40),
Primary key (id_historico)
);

drop trigger if exists historico;

CREATE TRIGGER historico after delete ON usuarios FOR EACH ROW
BEGIN
INSERT INTO usuarios_historicos(old.fecha_alta, curdate(), old.id_usuario);
END $$
delimiter ;

Última edición por Th3rm0; 05/04/2013 a las 14:18
  #6 (permalink)  
Antiguo 05/04/2013, 14:36
Avatar de Th3rm0  
Fecha de Ingreso: abril-2013
Ubicación: Sevilla
Mensajes: 7
Antigüedad: 11 años
Puntos: 0
Respuesta: funcion, trigger, procedimiento...

Código MySQL:
Ver original
  1. create function contar(descargas int)
  2. SELECT usuario, COUNT(usuario)
  3. FROM descargas
  4. GROUP BY usuario
  5. Where usuario=;
  6.  
  7. RETURN (descargas)

No se como meter el nombre del usuario, aunque me valdria en realidad que me mostrara una lista con todos imagino.
  #7 (permalink)  
Antiguo 05/04/2013, 15:42
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: funcion, trigger, procedimiento...

Hola de nuevo Th3rm0:

Mucho ojo... en la sección de parámetros (lo que está entre paréntesis) debes colocar todos los parámetros de entrada o salida que necesite tu función, aquí es donde debes meter el nombre del usuario... el parámetro descargas en realidad no lo tienes que incluir, ese es el dato que vas a regresar...

En la red hay muchísmos ejemplos de cómo crear funciones almacenadas en MySQL, te recomiendo que le eches un vistazo antes de continuar... para muestra un pequeño tutorial

http://www.nosolocodigo.com/como-cre...iones-en-mysql

Aquí podrás ver ejemplos de cómo crear funciones sin parámetros, con un parámetro o con varios parámetros... te repito, ejemplos hay millones!!! revisa algunos de ellos y estoy seguro que podrás dar con la respuesta.

Supongo que esto es algún tipo de trabajo de la escuela, soy maestro y no quiero caer en el error de darte la respuesta así, sin más... me gustaría que la obtuvieras por tu cuenta, pero si necesitas ayuda, con gusto trataremos de ayudarte.

Saludos
Leo.
  #8 (permalink)  
Antiguo 06/04/2013, 09:57
Avatar de Th3rm0  
Fecha de Ingreso: abril-2013
Ubicación: Sevilla
Mensajes: 7
Antigüedad: 11 años
Puntos: 0
Respuesta: funcion, trigger, procedimiento...

Cita:
Iniciado por leonardo_josue Ver Mensaje
Hola de nuevo Th3rm0:

Mucho ojo... en la sección de parámetros (lo que está entre paréntesis) debes colocar todos los parámetros de entrada o salida que necesite tu función, aquí es donde debes meter el nombre del usuario... el parámetro descargas en realidad no lo tienes que incluir, ese es el dato que vas a regresar...

En la red hay muchísmos ejemplos de cómo crear funciones almacenadas en MySQL, te recomiendo que le eches un vistazo antes de continuar... para muestra un pequeño tutorial

[url]http://www.nosolocodigo.com/como-crear-funciones-en-mysql[/url]

Aquí podrás ver ejemplos de cómo crear funciones sin parámetros, con un parámetro o con varios parámetros... te repito, ejemplos hay millones!!! revisa algunos de ellos y estoy seguro que podrás dar con la respuesta.

Supongo que esto es algún tipo de trabajo de la escuela, soy maestro y no quiero caer en el error de darte la respuesta así, sin más... me gustaría que la obtuvieras por tu cuenta, pero si necesitas ayuda, con gusto trataremos de ayudarte.

Saludos
Leo.
Gracias Leo, efectivamente es para un trabajo de escuela. El problema es que con el trabajo apenas tengo tiempo para los estudios. Voy a revisar ese enlace que me has pasado, creo que lo había visto antes pero me parecia que ninguno me servia para mi caso. Los mirare mejor y tratare de adaptar, si veo que no hay manera te suplicare ayuda jaja.

Un saludo!

Etiquetas: campo, funcion, registros, select, tabla, trigger
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 15:49.