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

Procedure / funcion

Estas en el tema de Procedure / funcion en el foro de Mysql en Foros del Web. Saludos! Lo que pasa es que tengo una función para concer el usuario que no tiene asignado un archivo. Para ésta función necesito 2 Select ...
  #1 (permalink)  
Antiguo 09/11/2009, 13:04
 
Fecha de Ingreso: agosto-2008
Mensajes: 82
Antigüedad: 15 años, 8 meses
Puntos: 4
Información Procedure / funcion

Saludos!

Lo que pasa es que tengo una función para concer el usuario que no tiene asignado un archivo.

Para ésta función necesito 2 Select . . .

1.- Consultar los id de usuario que tengan cierto cargo.
2.- En base al total de la consulta pasada busco los ID de usuario ordenado descendente con un límite de "NumeroDeUsuarios-1" en mi tabla de archivos.

Al final un bucle para comparar, los 2 listados . . . e introduccir el nombre del usuario que no aparesca . . .


Ejemplo:

TABLAS:

Usuarios
IdUsr
NomUsr



Archivos
IDArchivo
IdUsuario


GetIDUsers(x) = Función que selecciona usuarios con x cargo.
GetAvailableUser(x,y) = Funcion que selecciona de la tabla de archivos los IDUsuarios a quienes fueron asignados ésos archivos con x cargo, en orden DESC y Limite y.

EXEC = Convierte Un RecordSet a Vectores mediante propiedad GetRows
EXEC(RecordSet,QueryFunction,VectorizedResult,TotalVect orizedResult)

El TotalVectorizedResult Nos arroja el total de registros de nuestra consulta.

Código ASP:
Ver original
  1. Call EXEC(RS1,GetIDUsers(),V1,tV1)
  2. Call EXEC(RS2,GetAvailableUser(tV1-1),V2,tV2)
  3.  
  4. For Each User In V1
  5.    Found = 0
  6.    For Each Available In V2
  7.       If User = Available Then Found = 1 End If
  8.    Next
  9.    If Found = 0 Then nUser = User End If
  10. Next
  11.  
  12. Response.Write "Usuario disponible: " & nUser



Me gustaría poder hacer ésto desde MySQL para que me arrojara en 1 row ya el usuario disponible . . . . pero no tengo experiencia en Procedures . . .

Alguien que me pudiera guiar un poco . . .

Gracias . . .

Última edición por NA1TM3R; 09/11/2009 a las 13:21
  #2 (permalink)  
Antiguo 09/11/2009, 13:22
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Procedure / funcion

mira el ultimo post de las faq's de mysql y encontrarás el uso de un bucle, la asignación de variables etc.

Trata de hacerlo y si tienes alguún problema con algo vuelve y postea tu problema en concreto.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 12/11/2009, 13:44
 
Fecha de Ingreso: agosto-2008
Mensajes: 82
Antigüedad: 15 años, 8 meses
Puntos: 4
Información Respuesta: Procedure / funcion

Saludos de nuevo . . .

Pues resulta que no . . .

Ni siquiera he llegado a comparar los arreglos, porque una función no me deja crear arreglos . . .

No entiendo . . . aún cuando el valor de RETURN sea 1, me arroja el error de que el resultado contiene mas de una fila . . .

Otra cosa . . .

El LIMIT arroja errores de sintáxis . . .
Cuando se limita a una variable . . . ejemplo:

Código sql:
Ver original
  1. DECLARE tUsr INT;
  2.  
  3.     SELECT COUNT(ID_USR) INTO tUSR
  4.     FROM tblUSERS
  5.     WHERE ACTIVE = 1;
  6.  
  7.     SELECT ASIGNED INTO aUSR
  8.     FROM tblFILES
  9.     ORDER BY ID_FILE DESC LIMIT tUSR;

Así sea con COUNT ó con SQL_CALC_FOUND_ROWS > FOUND_ROWS();

Me manda a volar . . .

Alguna sugerencia ? ? ?

GRACIAS ! ! !

Última edición por NA1TM3R; 12/11/2009 a las 14:51
  #4 (permalink)  
Antiguo 12/11/2009, 15:10
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: Procedure / funcion

Te estás complicando demasiado para una consulta bastante simple:
Una consulta de este tipo te devuelve la lista de los que están asignados:
Código sql:
Ver original
  1. SELECT IdUsr, NomUsr
  2. FROM Usuarios U INNER JOIN Archivos A ON U.IdUsr = IdUsuario;

Esta otra te devuelve la lista de los que no están asignados:
SELECT IdUsr, NomUsr
FROM Usuarios U LEFT JOIN Archivos A ON U.IdUsr = IdUsuario
WHERE IdUsuario IS NULL;[/HIGHLIGHT]

En el contexto de lo tratas de lograr, para que te sirva una función que retorna un valor, deberías estar seguro de que en la lista hay un único usuario que no esté asignado. Si hay dos, la función ya no te sirve y debes resolverlo por consulta que devuelve una tabla.
Existe, si la posibilidad de obtener un solo string, separado por comas, conteniendo todos los ID o todos los nombres de quienes no están asignados, pero eso es otro tema y tampoco se puede resolver por SP o SF, ya que no pueden devolver un BLOB o un TEXT.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
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 12:50.