Ver Mensaje Individual
  #2 (permalink)  
Antiguo 18/10/2012, 08:14
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: Consulta Mysql devuelve registros repetidos

Hola adolphm:

Debes tener mucho cuidado cuando utilizas en una misma sentencia el operador AND y el operador OR, ya que estos 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.

En tu caso puede estar pasando algo parecido, ya que el operador AND tiene más jerarquía que el operador OR y todos los paréntesis que pones en realidad no sirven absolutamente para nada... Además, no entiendo por qué no utilizas una condición IN en lugar de poner tantos OR's... prueba así:

Código:
...
WHERE 
afiliadoscontrol.principal = 1  AND 
reparticiones_id IN ('13', '12', '2','9','8','3','5','6','7','11','1','4','10')
o en su defecto, si quisieras continuar utilizando todos los OR's deberías ponerlos así:

Código:
....
WHERE
afiliadoscontrol.principal = 1  AND 
(
reparticiones_id = '13' OR  
reparticiones_id = '12' OR  
....
reparticiones_id = '10'
) 
Es decir, quitar todos los paréntesis inútiles y dejar sólo un par, que agrupe todas las condiciones OR.

Haz la prueba y nos comentas. si continuas con problemas, deberás revisar que estés colocando todas las relaciones en cada ON, pues es posible que se esté realizando un producto cartesiano entre tus tablas.

Saludos
Leo