Ver Mensaje Individual
  #7 (permalink)  
Antiguo 03/01/2012, 12:06
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: Problemas con un select

Hola a todos:

No estoy de acuerdo con el comentario que pone azimutisima.

Cita:
Cuando mezclas AND y OR los OR SIEMPRE SIEMPRE DEBEN DE IR ENTRE PARENTESIS, sino se pasa el AND por el forro
No en todos los casos en los que utilices AND y OR debes utilizar paréntesis... El problema se resuelve poniendo paréntesis, pero creo que no se ha entendido correctamente qué es lo que está pasando.

En los operadores lógicos (AND, OR, NOT) así como en los matemáticos (+, -, /, *) existe una JERARQUÍA, es decir, un orden en que se evalúa una expresión.

En matemáticas, no es lo mismo 1+3*5 que (1+3)*5

Código:
1 + 3 * 5  = 16
--> la multiplicación tiene mayor jerarquía que la suma, por lo tanto se evalua primero 3*5 y después se suma 1.

Código:
(1 + 3) * 5 = 20
--> las operaciones entre paréntesis tienen más jerarquía que el resto, por lo tanto se evalúa primero 1 + 3 y después se multiplica por 5.

Con los operarodes lógicos NOT es el de mayor jerarquía, seguido por AND y OR como último... De la manera en que estaba colocando Tal y como estaba colocando la condición tumbero_x

Código:
WHERE 
R.categoria_asoc = 0 AND 
R.categoria_id LIKE '$nombre_rubro%' 
OR R.categoria_detalle LIKE '$nombre_rubro%'
El operador AND se ejecuta primero... en otras palabras sería el equivalente a poner esto:

Código:
WHERE 
(R.categoria_asoc = 0 AND 
R.categoria_id LIKE '$nombre_rubro%' )
OR R.categoria_detalle LIKE '$nombre_rubro%'
Por lo tanto, hay que tener cuidado en cuando usar o no paréntesis y no tomarlo como regla general.

Saludos
Leo.