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

[SOLUCIONADO] Uso del AND, OR y...

Estas en el tema de Uso del AND, OR y... en el foro de Mysql en Foros del Web. Tengo una duda, SELECT column1, column2 from tabla where condicion1 and condicion2 or condicion3 Esta consulta me dice que se cumpla la condicion1, y que ...
  #1 (permalink)  
Antiguo 06/02/2013, 13:09
 
Fecha de Ingreso: noviembre-2012
Ubicación: Villa Maria, Peru
Mensajes: 46
Antigüedad: 11 años, 5 meses
Puntos: 0
Uso del AND, OR y...

Tengo una duda,
SELECT column1, column2 from tabla
where condicion1 and condicion2 or condicion3

Esta consulta me dice que se cumpla la condicion1,
y que se cumpla la condicion 2 o la condicion 3

Pero ahora yo deseo que se cumpla la condicion1, la condicion 2,
y la condicion 3 puede que se cumpla o no.
Como seria mi consulta?
  #2 (permalink)  
Antiguo 06/02/2013, 13:22
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Uso del AND, OR y...

Hola dark_17:

Antes que nada, hay que tener cuidado con el manejo de los operadores AND y OR, ya que estos tienen una jeraquía distinta... al igual que en matemáticas, no es lo mismo

Código:
2 + 3 * 5 =  17

(2 + 3) * 5 = 25
Lo mismo ocurre con los operadores AND y OR, ya que el operador AND tiene mayor jerarquía, por lo tanto, igual que en el primer ejercicio con el operador (*) se ejecuta primero la multiplicación (3 * 5) y después la suma... Hay que tener cuidado con el uso de los paréntesis si vas a mezclar estos operadores.

Ahora si, volviendo al tu caso, tienes esto:

Código:
SELECT column1, column2 
FROM tabla
WHERE condicion1 and condicion2 or condicion3
Tal como lo tienes, y sin usar paréntesis, lo que estás haciendo es semejante a hacer esto:


Código:
SELECT column1, column2 
FROM tabla
WHERE (condicion1 and condicion2) or condicion3
Es decir, el resultado de la consulta evalua primero la condición AND y te arrojará resultados si se cumplen las condiciones 1 y 2 o si sólo se cumple la condición 3... mucho ojo con eso...

En cuanto a lo que pides, en realidad no le veo ningún sentido a poner la condición 3 si esta es opcional...

Cita:
Pero ahora yo deseo que se cumpla la condicion1, la condicion 2,
y la condicion 3 puede que se cumpla o no
Si la condición 3 se puede cumplir o no, y eso no te afecta en el resultado, estonces simplemente no la coloques:

Código:
SELECT column1, column2 
FROM tabla
WHERE condicion1 and condicion2 
Si esto no te sirve, igual sería conveniente que nos pongas algunos datos de ejemplo para ver qué es lo que necesitas evaluar.

Saludos
Leo.
  #3 (permalink)  
Antiguo 06/02/2013, 13:45
 
Fecha de Ingreso: noviembre-2012
Ubicación: Villa Maria, Peru
Mensajes: 46
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Uso del AND, OR y...

Si, mire lo simplifique bastante porque la consulta es mas engorrosa, lo que pasa es que necesito hacer un reporte en el que se eligira un rango de fechas, y los apartamentos, que seran enviadoa por post algo asi:

Código:
SELECT 
MONTHNAME( v.fecha_venta ) AS MES,
v.fecha_venta,
a.ubicacion,
a.idapart,
a.descripcion_ap,
SUM(v.facturado ) AS fact
FROM wp_venta v
INNER JOIN apartamento a ON v.id_ventaxapart = a.idapart
WHERE v.estado_venta = '1' 
and v.fecha_venta BETWEEN '$fecha_antes' AND '$fecha' 
or a.idapart IN ('$compacto')
GROUP BY a.descripcion_ap
donde $compacto es una cadena de caracteres separadas por comas,
lo que pasa es que si lo pongo como el ejemplo de arriba,
sí me muestra los datos, pero si pongo como este ejemplo:

Código:
SELECT 
MONTHNAME( v.fecha_venta ) AS MES,
v.fecha_venta,
a.ubicacion,
a.idapart,
a.descripcion_ap,
SUM(v.facturado ) AS fact
FROM wp_venta v
INNER JOIN apartamento a ON v.id_ventaxapart = a.idapart
WHERE v.estado_venta = '1' 
and v.fecha_venta BETWEEN '$fecha_antes' AND '$fecha' 
and a.idapart IN ('$compacto')
GROUP BY a.descripcion_ap
no me devuelve nada, es que yo necesito que se cumpla estas condiciones obligatoriamente:
Código:
WHERE v.estado_venta = '1' 
and v.fecha_venta BETWEEN '$fecha_antes' AND '$fecha'
y que el OR solo afecte esta condicion:
Código:
a.idapart IN ('$compacto')
no se si se me dejo entender.
  #4 (permalink)  
Antiguo 06/02/2013, 14:47
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Uso del AND, OR y...

Hola de nuevo dark_17:

el problema creo que no está en el uso del AND y el OR, sino en el uso de la condición IN. En primer lugar deberías decirnos de qué tipo de dato es tu colmna a.idapart... si es de tipo cadena, entonces debes tener cuidado con el uso de las comillas...

Supongamos que tienes estos datos:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +------+---------+---------------------+-------+
  3. | ID   | Usuario | Fecha               | Datos |
  4. +------+---------+---------------------+-------+
  5. |    1 | uno     | 2013-02-06 12:23:00 |    10 |
  6. |    2 | dos     | 2013-02-05 01:51:00 |    20 |
  7. |    3 | uno     | 2013-02-02 07:24:00 |    30 |
  8. |    3 | uno     | 2013-02-02 07:24:00 |    40 |
  9. |    4 | tres    | 2013-02-01 01:17:00 |    40 |
  10. |    5 | cuatro  | 2013-02-06 04:36:00 |    60 |
  11. |    6 | uno     | 2013-02-03 10:14:00 |    70 |
  12. |    7 | dos     | 2013-01-30 11:55:00 |    80 |
  13. |    8 | cuatro  | 2012-12-31 06:56:00 |    90 |
  14. |    9 | tres    | 2013-02-01 08:44:00 |    80 |
  15. +------+---------+---------------------+-------+
  16. 10 rows in set (0.00 sec)

Si solo quieres obtener los registros para los usuarios uno y cuatro tendrías que hacer lo siguiente:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla where usuario in ('uno', 'cuatro');
  2. +------+---------+---------------------+-------+
  3. | ID   | Usuario | Fecha               | Datos |
  4. +------+---------+---------------------+-------+
  5. |    1 | uno     | 2013-02-06 12:23:00 |    10 |
  6. |    3 | uno     | 2013-02-02 07:24:00 |    30 |
  7. |    3 | uno     | 2013-02-02 07:24:00 |    40 |
  8. |    5 | cuatro  | 2013-02-06 04:36:00 |    60 |
  9. |    6 | uno     | 2013-02-03 10:14:00 |    70 |
  10. |    8 | cuatro  | 2012-12-31 06:56:00 |    90 |
  11. +------+---------+---------------------+-------+
  12. 6 rows in set (0.03 sec)

Un posible error que puede pasar con la manera en que lo estás haciendo es que tengas algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla WHERE usuario IN ('uno,cuatro');
  2. Empty set (0.01 sec)

Observa, no es lo mismo ('uno','cuatro') a ('uno,cuatro'). Por la sintaxis creo que estás utilizando algo de PHP, te recomiendo que veas qué es exactamente lo que estás ejecutando, en lugar de utilizar las variables $compacto, $fecha_antes y $fecha

Saludos
Leo.
  #5 (permalink)  
Antiguo 06/02/2013, 15:46
 
Fecha de Ingreso: noviembre-2012
Ubicación: Villa Maria, Peru
Mensajes: 46
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Uso del AND, OR y...

Mejor explicado no podria estar, ese era el problema jejeee ya lo arregle
le cambie a un tipo de dato INT para que lo pueda incluir sin usar esas comillas :D
:D
gracias men :D. Eres un capoo¡¡¡
  #6 (permalink)  
Antiguo 06/02/2013, 15:56
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Uso del AND, OR y...

Jejejejeje... Un gusto haber sido de ayuda

Saludos!
Leo.

Etiquetas: Ninguno
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 07:26.