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

[SOLUCIONADO] "Select where" varias opciones.

Estas en el tema de "Select where" varias opciones. en el foro de Mysql en Foros del Web. Buen dia. El titulo no puede conseguir algo mas puntual, asi que me disculpo de ante mano. Tengo la siguiente consulta la cual me funciona ...
  #1 (permalink)  
Antiguo 06/01/2016, 19:06
Avatar de chulifo  
Fecha de Ingreso: abril-2009
Ubicación: perdido en codigos del PHP, pero aprendo rapido!
Mensajes: 524
Antigüedad: 15 años
Puntos: 18
Pregunta "Select where" varias opciones.

Buen dia.

El titulo no puede conseguir algo mas puntual, asi que me disculpo de ante mano.

Tengo la siguiente consulta la cual me funciona bien hasta el momento.

Código MySQL:
Ver original
  1. Select * from tabla
  2. where (estado = 1 or estado = 2 or estado = 3 ) and fechaf <= 1452042056 order by id asc

Como ven en ella quiero buscar en una tabla los resultados donde la columna estado tenga valores 1 o 2 o 3, y que la columna fecha sea menor a un tiempo especifico.

Mi consulta realmente es, ¿Puedo simplificar este código? En este caso solo busco 3 opciones "1 o 2 o 3", pero tengo otro caso donde son mas de 12 opciones. Espero me hayan entendido y puedan ayudarme con ello.
__________________
Solo soy un simple fanático que mata el tiempo de la mejor manera.

Última edición por gnzsoloyo; 07/01/2016 a las 05:36
  #2 (permalink)  
Antiguo 07/01/2016, 03:59
 
Fecha de Ingreso: enero-2016
Mensajes: 16
Antigüedad: 8 años, 3 meses
Puntos: 1
Respuesta: "Select where" varias opciones.

Hola,
Si el valor de los estados es consecutivo, puedes probar a usar between. Sería algo como:
Código SQL:
Ver original
  1. SELECT * FROM tabla WHERE (estado BETWEEN 1 AND 3) AND fechaf <=1452042056 ORDER BY id ASC

Otro consejo para que la consulta sea más rápida es que evites el uso de *. Escribe directamente el nombre de las columnas que necesites, aunque sean todas.

Un saludo!

Última edición por gnzsoloyo; 07/01/2016 a las 05:36
  #3 (permalink)  
Antiguo 07/01/2016, 05:59
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: "Select where" varias opciones.

Si los valores de la lista son un rango, puedes usar lo que te propone raquelRkl. Si son valores salteados, tienes tres opciones:
1) Crear dinámicamente la consulta con un lenguaje de programación, donde uses IN(lista de datos).
2) Crear una cadena con todos los valroes separados por comas y usar FIND_IN_SET()
3) Crear una sentencia preparada para ejecutar el IN().

las dos ultimas son para usar en stored procedures. La otra es simplemente:
Código MySQL:
Ver original
  1. SELECT a, b, c,
  2. FROM tabla
  3. WHERE campo IN(1, 2, 4, 98, 123, 67, ... etc)

La segunda opcion funciona así:

Código MySQL:
Ver original
  1. SELECT a, b, c,
  2. FROM tabla
  3. WHERE FIND_IN_SET(campo, '1, 2, 4, 98, 123, 67, ... etc')>0
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 07/01/2016 a las 06:05
  #4 (permalink)  
Antiguo 08/01/2016, 15:51
Avatar de chulifo  
Fecha de Ingreso: abril-2009
Ubicación: perdido en codigos del PHP, pero aprendo rapido!
Mensajes: 524
Antigüedad: 15 años
Puntos: 18
Respuesta: "Select where" varias opciones.

Cita:
Iniciado por raquelRkl Ver Mensaje
Hola,
Si el valor de los estados es consecutivo, puedes probar a usar between. Sería algo como:
Código SQL:
Ver original
  1. SELECT * FROM tabla WHERE (estado BETWEEN 1 AND 3) AND fechaf <=1452042056 ORDER BY id ASC

Otro consejo para que la consulta sea más rápida es que evites el uso de *. Escribe directamente el nombre de las columnas que necesites, aunque sean todas.

Un saludo!
Cita:
Iniciado por gnzsoloyo Ver Mensaje
Si los valores de la lista son un rango, puedes usar lo que te propone raquelRkl. Si son valores salteados, tienes tres opciones:
1) Crear dinámicamente la consulta con un lenguaje de programación, donde uses IN(lista de datos).
2) Crear una cadena con todos los valroes separados por comas y usar FIND_IN_SET()
3) Crear una sentencia preparada para ejecutar el IN().

las dos ultimas son para usar en stored procedures. La otra es simplemente:
Código MySQL:
Ver original
  1. SELECT a, b, c,
  2. FROM tabla
  3. WHERE campo IN(1, 2, 4, 98, 123, 67, ... etc)

La segunda opcion funciona así:

Código MySQL:
Ver original
  1. SELECT a, b, c,
  2. FROM tabla
  3. WHERE FIND_IN_SET(campo, '1, 2, 4, 98, 123, 67, ... etc')>0
Muchas gracias por sus respuestas, todas me seran muy util!
__________________
Solo soy un simple fanático que mata el tiempo de la mejor manera.

Etiquetas: fecha, select, tabla
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 10:27.