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

Mostrar datos que NO aparecen en otra relacion

Estas en el tema de Mostrar datos que NO aparecen en otra relacion en el foro de Mysql en Foros del Web. Hola, Tengo 3 tablas, Roles, acciones y datos. Cuando las 3 están unidas, puedo ver , por ejemplo: El Rol Adminstrador puede agregar empleados. La ...
  #1 (permalink)  
Antiguo 18/04/2012, 13:59
Avatar de latinpower  
Fecha de Ingreso: septiembre-2010
Ubicación: Canelones
Mensajes: 116
Antigüedad: 13 años, 7 meses
Puntos: 10
Mostrar datos que NO aparecen en otra relacion

Hola,

Tengo 3 tablas, Roles, acciones y datos.

Cuando las 3 están unidas, puedo ver , por ejemplo:

El Rol Adminstrador puede agregar empleados.

La cosa es la siguiente, quiero listar todos las acciones sobre datos que le faltan a un determinado rol

En la teoria vendría a ser

Select Datos/Acciones de relacciondato donde (las acciones y las tareas) sean diferentes a (las acciones y tareas ya , asignadas a un rol determinado).

O sea, mostrar todas las acciones sobre datos que no aparecen asignadas para ese rol, es decir, las acciones y los datos que no figuran en la tabla de relacion RelRolAccionDato, o que le faltarían a ese rol.

Dejo un imagen para que vean.

http://dl.dropbox.com/u/69027373/tablas.png
  #2 (permalink)  
Antiguo 18/04/2012, 14:26
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Mostrar datos que NO aparecen en otra relacion

Me invento nombres de campo, pero a ver si esta es la lógica.
SELECT roles.idrol, roles.rol, acciones.idaccion, acciones.accion, datos.iddato, datos.dato FROM roles LEFT JOIN acciones ON roles.idrol = acciones.idrol INNER JOIN datos ON acciones.idaccion = datos.idaccion WHERE acciones.idrol IS NULL
  #3 (permalink)  
Antiguo 18/04/2012, 14:37
Avatar de latinpower  
Fecha de Ingreso: septiembre-2010
Ubicación: Canelones
Mensajes: 116
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: Mostrar datos que NO aparecen en otra relacion

El problema es que Rel Rol Accion Dato y Rel Accion Dato son tablas extras, es decir un rol puede tener muchas acciones sobre muchos datos, y a su vez una accion puede tener muchos datos, entonces cambia todo el select.
  #4 (permalink)  
Antiguo 21/04/2012, 04:45
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Mostrar datos que NO aparecen en otra relacion

No nos aclaras cómo se relacionan las tablas. A ver, tienes una tabla roles, otra acciones, otra datos, pero imagino que tienes otra tabla donde guardas accionesdatos y otra donde guardas rolesaccionesdatos. ¿Es así? Dinos los nombres de todas las tablas y de sus campos y relaciones. Ponnos algunos datos y haremos pruebas. Si la lista de acciones datos es limitada, es decir, no todas las acciones pueden aplicarse a todos los datos, tienes que tener una tabla accionesdatos, y luego además otra tabla rolesaccionesdatos relacionada con ella, en la que se cargarán además de su propio identificador, el idacciondato y el idrol. Con eso controlarás lo que quieres. Dime si voy muy descaminado. Pon ejemplos concretos
  #5 (permalink)  
Antiguo 21/04/2012, 16:41
Avatar de latinpower  
Fecha de Ingreso: septiembre-2010
Ubicación: Canelones
Mensajes: 116
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: Mostrar datos que NO aparecen en otra relacion

Tengo una tabla roles:

:Roles:
idrol
nombre

:Acciones:
idaccion
nombre

:Datos:
iddato
nombre

:RelacionRolAccionDato:
idrel
idrol
idaccion
iddato

:RelacionAccionDato
idrel
idaccion
iddato

En la practica puedo tener que:

El Rol administrador(tabla roles) puede modificar(tabla acciones) la tabla usuarios(tabla datos)

Cuando por programa le muestro al usuario que quiere que haga el nuevo rol le muestro

Administrar(accion) usuarios(dato)
Visualizar(accion) pedidos(dato)

O sea que el usuario puede especificar sobre cuales tablas tiene rango de accion el nuevo rol, que pertenece al nuevo usuario que está creando.


Ahora lo que yo quiero, es un select que me muestre todas las acciones sobre datos que no han sido asociadas a ese rol, o sea todo lo que ese rol no puede hacer
  #6 (permalink)  
Antiguo 22/04/2012, 14:55
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Mostrar datos que NO aparecen en otra relacion

¿Cómo guardas esos datos de los que hablas en las tablas? Me refiero a esto:
Imagino que las acciones y datos son limitados y se recogen en su totalidad en la tabla RelacionAccionDato.
Creo que tu problema es haber separado esos valores en la tabla RelacionRolAccionDato. Te hubiera bastado con un idAccionDato en la tabla RelacionAccionDato, que luego utilizarías en la tabla RelacionRolAccionDato, puesto que una acción es siempre una acción sobre un dato y ya tienes un listado preestablecido de los mismos, ¿es así? Administrar usuarios es una acción sobre un dato concreto, igual que visualizar pedidos. Si esa accion sobre dato tuviera ya un identificador te resultaría más fácil encontrar lo que quieres. No obstante, si te he entendido bien quieres encontrar las acciones sobre datos que no realiza un rol. No lo he probado, pero, si lo he entendido bien, tal vez algo como esto podría servirte:
SELECT rad.idaccion, rad.iddato FROM RelacionaAccionDato rad LEFT JOIN (SELECT rrad.idaccion, rrad.iddato FROM RelacionAccionDato rrad WHERE rrad.idrol = rolquebusques)t1 ON (rad.idaccion = t1.idaccion AND rad.iddato = t1.iddato) WHERE t1.idaccion IS NULL OR t1.iddato IS NULL
  #7 (permalink)  
Antiguo 22/04/2012, 20:03
Avatar de latinpower  
Fecha de Ingreso: septiembre-2010
Ubicación: Canelones
Mensajes: 116
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: Mostrar datos que NO aparecen en otra relacion

Ahí va,

Muchas gracias, el select funciono perfectamente, luego voy a cambiar eso que me dijiste con las tablas.
  #8 (permalink)  
Antiguo 23/04/2012, 11:18
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Mostrar datos que NO aparecen en otra relacion

ten cuidado al hacer los cambios.
el select que te puse es para la estructura que tienes. Si la cambias y eliminas los campos idaccion e iddato de RelacionRolAccionDato y añades en su lugar un idAccionDato como FK la consulta será mucho más sencilla... Además tendrás que añadir un AccionDato como PK de la tabla RelacionAccionDato, si es que no estás usando para ello ya el idRel que pones.
SELECT rad.idaccion, rad.iddato FROM RelacionaAccionDato rad LEFT JOIN (SELECT rrad.idacciondato FROM RelacionAccionDato rrad WHERE rrad.idrol = rolquebusques)t1 ON (rad.idacciondato = t1.idacciondato) WHERE t1.idacciondato IS NULL
No lo he probado

Etiquetas: relacion, select, tabla
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 00:51.