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

que prevalezca una condición aunque haya otras condiciones que la contradigan??

Estas en el tema de que prevalezca una condición aunque haya otras condiciones que la contradigan?? en el foro de Mysql en Foros del Web. Que tal forer@s Quisiera saber si es posible que en la consulta, se cumpla la primer condicion del where aunque lo siguiente que se ejecute ...
  #1 (permalink)  
Antiguo 31/10/2012, 14:37
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
que prevalezca una condición aunque haya otras condiciones que la contradigan??

Que tal forer@s

Quisiera saber si es posible que en la consulta, se cumpla la primer condicion del where aunque lo siguiente que se ejecute lo contradiga??, veran:

tengo 2 tablas:

+--------------+
| carpeta
+--------------+
| id_carpeta
| id_permiso
+--------------+
y
+--------------+
| usuarios
+--------------+
| id_usuario
| autorizacion
+--------------+

se supone que los permisos para la tabla carpeta son:

1->Publico
2->Privado
3->Personalizado

en el campo autorizacion de la tabla usuario se guarda el id (o ids) de la carpeta

entonces por ejemplo:

+--------------------------+
| carpeta
+--------------------------+
| id_carpeta->1
| id_permiso->3
+--------------------------+
| id_carpeta->2
| id_permiso->2
+--------------------------+

+--------------+
| usuarios
+--------------+
| id_usuario->6
| autorizacion->1,2
+--------------+

la logica que quiero es:

cuando una carpeta tiene permiso 3 (personalizado) el usuario que tenga autorizacion de esa carpeta la vea

pero

cuando una carpeta tenga permiso 2 (privado) aunque el usuario que tenga autorizacion de esa carpeta por ningún motivo la vea

entonces volviendo al ejemplo, podria llegar a tener esta consulta:

Código MySQL:
Ver original
  1. select * from carpeta where permisos='3' and id_carpeta='1' or id_carpeta='2' order by id_carpeta ASC

y solo deberia mostrarme:

carpeta id_carpeta = 1

sin embargo me muestra las 2

Entonces, se puede hacer cumplir primero la condicion permisos='3' y aunque lo que tenga después lo revierta, pero esta prevalezca??

gracias
  #2 (permalink)  
Antiguo 31/10/2012, 15:46
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: que prevalezca una condición aunque haya otras condiciones que la contrad

Hola catpaw:

Muchas veces hemos tratado en este foro el problema de utilizar en el WHERE los operadores AND y OR a la vez, pero tal pareciera que los foristas no han leído al respecto...

el operador AND y el operador OR, tienen una jerarquía distinta, por lo que debes hacer un uso correcto de los paréntesis.

En matemáticas si tu haces esto:

Código:
2 + 3 * 5 = 17
ya que el operador de multiplicación TIENE MAYOR JERARQUÍA que el operador de suma, por lo tanto no importa que la suma aparezca más a la izquierda de la operación, PRIMERO SE EJECUTA LA MULTIPLICACIÓN y en enseguida se hace la suma.

Por otro lado, si tu haces esto:

Código:
(2 + 3) * 5 = 25
Esto es porque al colocar paréntesis indicas que se tiene que realizar primeramente la suma y después la resta. Lo mismo pasa con el AND y el OR... no entendí muy bien la explicación que das acerca de tu lógica de negocio, pero creo que sería simpelemente hacer algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM carpeta;
  2. +------------+------------+
  3. | id_carpeta | id_permiso |
  4. +------------+------------+
  5. |          1 |          3 |
  6. |          2 |          2 |
  7. +------------+------------+
  8. 2 rows in set (0.16 sec)
  9.  
  10. mysql> SELECT * FROM carpeta
  11.     -> WHERE id_permiso='3' AND (id_carpeta='1' OR id_carpeta='2')
  12.     -> ORDER BY id_carpeta ASC;
  13. +------------+------------+
  14. | id_carpeta | id_permiso |
  15. +------------+------------+
  16. |          1 |          3 |
  17. +------------+------------+
  18. 1 row in set (0.00 sec)

Dale un vistazo para ver si ese es el problema, pero si no funciona, trata de explicar mejor cómo es la condición que tienes que evaluar.

Saludos
Leo.
  #3 (permalink)  
Antiguo 01/11/2012, 09:32
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
Respuesta: que prevalezca una condición aunque haya otras condiciones que la contrad

hola leonardo_josue gracias por tu repuesta

la verdad no se me habia ocurrido lo de los parentesis

la consulta le cambie un detalle y le agregue parentesis, parece que si funciona, quedo así:

Código MySQL:
Ver original
  1. SELECT * FROM carpeta WHERE id_permiso!='2' AND (id_carpeta='1' OR id_carpeta='2') ORDER BY id_carpeta ASC;

gracias!!

Etiquetas: aunque, condición, condiciones, select, tabla, campos
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 09:42.