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

ayuda con consulta SQL

Estas en el tema de ayuda con consulta SQL en el foro de Bases de Datos General en Foros del Web. Hola a todos. Tengo un problema que me gustaría resolver con una única sentencia SQL. Os cuento. Tengo 3 tablas: usuarios (idUsuario,nombre,edad);informes (idInforme,idUsuario); usuariosAutorizados(idInforme,idUsuario), y ...
  #1 (permalink)  
Antiguo 13/01/2005, 05:38
 
Fecha de Ingreso: agosto-2003
Mensajes: 50
Antigüedad: 21 años, 3 meses
Puntos: 0
ayuda con consulta SQL

Hola a todos. Tengo un problema que me gustaría resolver con una única sentencia SQL. Os cuento.

Tengo 3 tablas: usuarios (idUsuario,nombre,edad);informes (idInforme,idUsuario); usuariosAutorizados(idInforme,idUsuario),
y tienen la siguiente utilidad:
- En la tabla usuarios tengo registrados a todos los usuarios del sistema.
- En la tabla informes tengo registrados todos los informes que los usuarios han creado
- En la tabla usuarios autorizados tengo registrados a los usuarios que están autorizados a visualizar los diferentes informes.

El concepto importante del caso es que un usuario tiene 2 "llaves" mediante las que poder ver los informes:
1- Teniendo más edad que el usuario creador del informe. Es decir, si el informe 1 lo crea 'user1' (de 23 años),
aunque 'user1' no autorice a 'user2' (de 25 años) a ver el informe, 'user2', por el hecho de ser más mayor, podrá ver
tal informe.
2- Otra posibilidad es, aún siendo más pequeño, que 'user2' de (25 años) autorice a 'user3' (de 21 años) a visualizar el informe.
Esta autorización quedará guardada en la tabla usuariosAutorizados

El problema viene ahora. Si tengo 2 usuarios ('userX' y 'userY')de 24 años, ¿cómo puedo hacer para que 1 de ellos visualice todos
los informes que hayan hecho otros usuarios de edad inferior y además aquellos para los cuales esté autorizado
aunque pertenezcan a gente más mayor?

Bueno, "nada más". Un saludo y gracias por todo.
  #2 (permalink)  
Antiguo 13/01/2005, 06:00
Avatar de univercity  
Fecha de Ingreso: noviembre-2002
Mensajes: 681
Antigüedad: 22 años
Puntos: 0
para que negar la visualizacion por edad???... que te indica eso???...

bueno si dices que el problema te da cuando intentas con dos de mismas edades, bueno donde hagas el criterio de pon simplemente >= ó <= es decir



en sql... sql="select * from tutabla where edad >="& 25 &" "

slds.
__________________
"Lo importante es nunca dejar de hacerse preguntas"
Albert Einstein
  #3 (permalink)  
Antiguo 13/01/2005, 09:18
 
Fecha de Ingreso: agosto-2003
Mensajes: 50
Antigüedad: 21 años, 3 meses
Puntos: 0
Tengo que negar la visualización por edad porque es así como me lo piden... :(

La consulta que me señales me serviría para saber los usuarios que tengo registrados con más de 25 años, y no es eso lo que quiero, lo que necesito saber es cuáles son los informes que ha realizado la gente más pequeña que yo (por ejemplo) y además, visualizar aquellos informes de la gente que aún siendo más mayor que yo, me han dado permiso para que pueda verlos...
  #4 (permalink)  
Antiguo 13/01/2005, 10:00
 
Fecha de Ingreso: abril-2003
Ubicación: Madrid
Mensajes: 707
Antigüedad: 21 años, 7 meses
Puntos: 0
No entiendo el problema que puedas tener por tener usuarios de la misma edad, prueba a hacer algo así:

SELECT informes.idInforme FROM usuarios INNER JOIN informes
ON usuarios.idUsuario = informes.idUsuario
WHERE usuarios.edad < (SELECT edad FROM usuarios WHERE idUsuario = x
UNION
SELECT idInforme FROM usuariosAutorizados WHERE idUsuario = x

Prueba y me dices...

Un saludo
  #5 (permalink)  
Antiguo 13/01/2005, 16:37
Avatar de Sir Matrix  
Fecha de Ingreso: octubre-2000
Ubicación: Dentro de mi cabeza. ono?
Mensajes: 1.264
Antigüedad: 24 años, 1 mes
Puntos: 3
y algo asì?

select u.*, i.*, ua.* from usuarios u, informes i, usuariosautorizados ua
where u.idusuario = i.idusuario
and u.idusuario= ua.idusuario
and edad > 24
UNION
select u.*, i.*, ua.* from usuarios u, informes i, usuariosautorizados ua
where u.idusuario = i.idusuario
and u.idusuario= ua.idusuario
and ua.autorizado= 1
__________________
|||| ))>_<(( ||||
www.webmagic.cl <-- esta pagina está mala, no la busquen
  #6 (permalink)  
Antiguo 14/01/2005, 10:18
 
Fecha de Ingreso: agosto-2003
Mensajes: 50
Antigüedad: 21 años, 3 meses
Puntos: 0
Gracias Teri, me has dado una idea para hacer lo que quería. A todos los demás, también muchas gracias.
  #7 (permalink)  
Antiguo 17/01/2005, 07:04
 
Fecha de Ingreso: abril-2003
Ubicación: Madrid
Mensajes: 707
Antigüedad: 21 años, 7 meses
Puntos: 0
Por cierto, se me olvidó poner un paréntesis

SELECT informes.idInforme FROM usuarios INNER JOIN informes
ON usuarios.idUsuario = informes.idUsuario
WHERE usuarios.edad < (SELECT edad FROM usuarios WHERE idUsuario = x)
UNION
SELECT idInforme FROM usuariosAutorizados WHERE idUsuario = x


si no lo pones ahí, tendrás resultados extraños

Saludos
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 22:58.