Foros del Web » Programando para Internet » ASP Clásico »

Ayuda con filtro en una seleccion de 2 tablas

Estas en el tema de Ayuda con filtro en una seleccion de 2 tablas en el foro de ASP Clásico en Foros del Web. Buenas tardes, os planteo mi problema. Tengo 3 tablas: usuarios, empresas y contactos. La tabla usuarios consta de Id_usuario, nombre_usuario y permiso (admin o cliente). ...
  #1 (permalink)  
Antiguo 22/06/2005, 05:21
 
Fecha de Ingreso: mayo-2003
Mensajes: 70
Antigüedad: 21 años, 11 meses
Puntos: 0
Ayuda con filtro en una seleccion de 2 tablas

Buenas tardes,
os planteo mi problema.

Tengo 3 tablas: usuarios, empresas y contactos.
La tabla usuarios consta de Id_usuario, nombre_usuario y permiso (admin o cliente).
La tabla empresas consta de Id_empresa, nombre_empresa.
La tabla contactos consta de Id_usuario y Id_empresa.
Contactos son las personas que administran las empresas, y pueden ser una o varias.

Pues bien, necesito modificar los contactos de una empresa X y para ello quiero rellenar una lista desplegable con todos los usuarios cuyo permiso sea admin y que aparezcan como seleccionados solo los que ya figuran en la tabla contactos como administradores de la empresa X.

Alguien podria decirme como seria la sentencia SQL o cual seria la forma de hacerlo. Yo ando un poco perdido y me he quedado con este codigo, no he conseguido nada mas.


Código:
<select name="administradores" size="4" multiple id="administradores" class="form">
<%
	set oConn=Server.CreateObject("ADODB.Connection")
	set rs=Server.CreateObject("ADODB.Recordset")
	set rsOtro=Server.CreateObject("ADODB.Recordset")

	oConn.Open DBQAdmin
	
	SQL="SELECT * FROM Usuarios where Permiso = 'admin' "
	rsUsuarios.Open SQL, oConn
	
	SQL2="SELECT * FROM Contactos where ID_Empresa = " & request.querystring("empresa")
	rsContactos.Open SQL2, oConn

	while not rsUsuarios.EOF 
%>
	<option value="<%=rsUsuarios.Fields("ID_Usuario")%>"><%=rsUsuarios.Fields("Nombre_Usuario")%></option>
<%
	rsUsuarios.MoveNext
	wend
	rsUsuarios.Close
%>
</select>
Un saludo.
  #2 (permalink)  
Antiguo 22/06/2005, 10:25
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 3 meses
Puntos: 98

Bueno, asumo que sabemos el id de la empresa y que el campo permiso es un entero, que si es administrador, tiene valor de 1, creo que quedaria algo asi:

Código:
strSQL = " SELECT a.id_usuario, a.nombre_usuario, b.nombre_empresa " & _
"FROM usuarios a INNER JOIN empresa b ON b.id_empresa " & _  
variable_id_empresa & " INNER JOIN contactos c ON c.id_usuario = " & _
"a.id_usuario AND c.id_empresa = a.id_empresa WHERE a.permiso = 1 "
Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #3 (permalink)  
Antiguo 22/06/2005, 10:57
 
Fecha de Ingreso: mayo-2003
Mensajes: 70
Antigüedad: 21 años, 11 meses
Puntos: 0
Buenas tardes, u_goldman

resulta que el error que me da ahora es: Argumentos incorrectos, fuera del intervalo permitido o en conflicto con otros, en la instruccion "rs.Open SQL, oConn"
Habias asumido bien, unicamente que no se si faltaba un "=" antes de la variable de empresa o no. Pero el caso es que me sigue fallando algo.
Te pongo el codigo completo por si puedes hacer algo. Gracias.

Código:
 <select name="administradores" size="4" multiple id="administradores" class="form">
<%
	set oConn=Server.CreateObject("ADODB.Connection")
	set rs=Server.CreateObject("ADODB.Recordset")
	oConn.Open DBQAdmin
	
	strSQL = "SELECT a.id_usuario, a.nombre_usuario, b.nombre_empresa " & _
	"FROM users a INNER JOIN empresas b ON b.id_empresa = " & _  
	empresa & " INNER JOIN empresa_administrador c ON c.id_usuario = " & _
	"a.id_usuario AND c.id_empresa = a.id_empresa WHERE a.permiso_usuario = 1 "
	
	rs.Open SQL, oConn
	
	cuenta=1
	while not rs.EOF 
%>
	<option value="<%=rs.Fields("ID_Usuario")%>"><%=rs.Fields("Nombre_Usuario")%></option>
<%
	rs.MoveNext
	cuenta=cuenta+1
	wend
	rs.Close
%>
</select>
De todas formas, en la etiqueta option no habria que poner ninguna condicion o algo asi?

Gracias de nuevo.
  #4 (permalink)  
Antiguo 22/06/2005, 11:03
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 3 meses
Puntos: 98
No debes pasarle la variable strSQL y no SQL?

rs.Open strSQL, oConn
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #5 (permalink)  
Antiguo 23/06/2005, 02:28
 
Fecha de Ingreso: mayo-2003
Mensajes: 70
Antigüedad: 21 años, 11 meses
Puntos: 0
Pues vas a tener razon, confundi la variable del SQL, pero aun no me funciona. Creo que no me explique demasiado bien. Lo intento de nuevo.

No necesito usar la tabla empresas, solo necesito una relacion entre usuarios y contactos, o eso creo.

Necesito recoger de la tabla usuarios todos los administradores, como tu bien decias los que tengan el campo permiso = 1, y en la lista desplegable quiero que me aparezcan todos los administradores pero solo que esten con la opcion "selected" los que en la tabla contactos estan asignados para la empresa, Id_empresa, que recojo mediante querystring. (var_empresa)

Por eso creo que no necesito la tabla empresas. Perdon si te confundi al decirte que tenia 3 tablas, olvide decir que solo usaria 2 en este caso.

La tabla usuarios consta de Id_usuario, nombre_usuario y permiso ( 1=admin o 2=cliente).
La tabla contactos consta de Id_usuario y Id_empresa.


Gracias de todos modos, si no me aclaro yo no debe ser facil para el resto ayudarme.
  #6 (permalink)  
Antiguo 23/06/2005, 10:18
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 3 meses
Puntos: 98
Bueno, pues es mas o menos lo mismo uniendo solamente dos tablas, analiza un poco el query que te puse.

Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #7 (permalink)  
Antiguo 24/06/2005, 04:54
 
Fecha de Ingreso: mayo-2003
Mensajes: 70
Antigüedad: 21 años, 11 meses
Puntos: 0
Muchas gracias, ya lo entendi.
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 20:55.