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

consulta metiendo and e IN

Estas en el tema de consulta metiendo and e IN en el foro de Mysql en Foros del Web. hola una pregunta, por ejemplo el objetivo al que quiero llegar es. que ... haga esto.. SELECT IDPropiedad FROM rent1412_rentar.serv_prop WHERE IDServicio IN(17,18,19) and IDServicio=37 ...
  #1 (permalink)  
Antiguo 22/02/2013, 08:58
 
Fecha de Ingreso: junio-2010
Mensajes: 752
Antigüedad: 13 años, 11 meses
Puntos: 5
consulta metiendo and e IN

hola una pregunta, por ejemplo el objetivo al que quiero llegar es. que ...

haga esto..



SELECT IDPropiedad FROM rent1412_rentar.serv_prop
WHERE IDServicio IN(17,18,19) and IDServicio=37



de php recibo variables, en array,,,


si estos array tienen mas de un valor al sql le agregare un IN,
teniendo la opcion que la comparacion sea igual a cualquiera de los valores que contiene el IN.

si el array contiene un solo valor , la clausula que se le agrega al sql, sera que contiene un AND, haciendo que obligue a la consulta que sea ese valor, especifico...SI o SI


asi no me funciona...
  #2 (permalink)  
Antiguo 22/02/2013, 09:06
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: consulta metiendo and e IN

AND hace que ambas condiciones se cumplan al mismo tiempo. Y como la evaluación se hace con cada registro, esa consulta no te devolverá datos a menos que ese valor esté también en la lista.
Por su lado, si tiene un único valor, la lista opera como "=", por lo que esto
Código MySQL:
Ver original
  1. SELECT IDPropiedad FROM rent1412_rentar.serv_prop
  2. WHERE IDServicio IN(37) ;
es semánticamente idéntico a esto:
Código MySQL:
Ver original
  1. SELECT IDPropiedad FROM rent1412_rentar.serv_prop
  2. WHERE IDServicio = 37 ;
Si la consulta la creas dinámicamente, ¿por qué no simplemente en un caso pones una cosa, y en el otro pones la otra?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 22/02/2013, 09:31
 
Fecha de Ingreso: junio-2010
Mensajes: 752
Antigüedad: 13 años, 11 meses
Puntos: 5
Respuesta: consulta metiendo and e IN

...

serian consultas separadas entonces, por cada array,

si es IN, una consulta,
si es AND, una consulta..


a los valores que me devuelva la consulta, los coloco en array a cada uno, y despues junto a los 2,
elimino los valores igual ,, de alguna forma con PHP

y bueno tendre los valores...
  #4 (permalink)  
Antiguo 22/02/2013, 09:39
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: consulta metiendo and e IN

Cita:
serian consultas separadas entonces, por cada array,

si es IN, una consulta,
si es AND, una consulta..
¿Para qué?
Si recuperas la misma cantidad de campos, simplemente ponlas en una sola consulta con UNION:
Código MySQL:
Ver original
  1. SELECT IDPropiedad FROM rent1412_rentar.serv_prop
  2. WHERE IDServicio IN(listaDeValores)
  3. SELECT IDPropiedad FROM rent1412_rentar.serv_prop
  4. WHERE IDServicio = valor ;
Por otro lado, a lo que yo me refiero es que si creas dinámicamente la consulta, simplemente ve rifiques si te están llegando uno o más valores a buscar.
Si es uno, al WHERE le pones
Código MySQL:
Ver original
  1. WHERE IDServicio = valor
o bien si es más de uno:
Código MySQL:
Ver original
  1. WHERE IDServicio IN(listaDeValores)

Pero incluso, ni siquiera es necesario, porque con poner
Código MySQL:
Ver original
  1. WHERE IDServicio IN(listaDeValores)
cuando lo que te llega un único valor es suficiente.
¿O no se entiende lo de "semánticamente iguales"?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 22/02/2013, 09:48
 
Fecha de Ingreso: junio-2010
Mensajes: 752
Antigüedad: 13 años, 11 meses
Puntos: 5
Respuesta: consulta metiendo and e IN

bueno si tenes razon

por cada array un select...

si son 3 array , ahi seran 3 union, o 2 y despues 1 a 1


no va a importar si es un o mas valores, ya que como dices...

el IN con un valor,, es un AND.

IN con varios son OR
  #6 (permalink)  
Antiguo 22/02/2013, 10:01
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: consulta metiendo and e IN

Cita:
el IN con un valor,, es un AND.

IN con varios son OR
Precisamente esa es la idea...

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: php, select, sql
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 15:30.