Ver Mensaje Individual
  #2 (permalink)  
Antiguo 31/10/2012, 15:46
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 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.