elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos (Moderador: Carloswaldo)
| | | |-+  Consulta con un numero variable de condiciones
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Consulta con un numero variable de condiciones  (Leído 3,481 veces)
santi810

Desconectado Desconectado

Mensajes: 21


Ver Perfil
Consulta con un numero variable de condiciones
« en: 22 Agosto 2014, 22:58 pm »

Buenos dias.

Empiezo presentando mi tabla:
Código:
-- Estructura de tabla para la tabla `extras`
--

CREATE TABLE IF NOT EXISTS `extras` (
  `usuario` varchar(30) COLLATE utf8_spanish2_ci NOT NULL,
  `extraID` int(11) NOT NULL AUTO_INCREMENT,
  `fecha` date NOT NULL,
  `local` varchar(30) COLLATE utf8_spanish2_ci NOT NULL,
  `tempo` int(2) NOT NULL,
  `precio` decimal(5,2) NOT NULL,
  `notas` text COLLATE utf8_spanish2_ci NOT NULL,
  `pago_asoc` char(1) COLLATE utf8_spanish2_ci NOT NULL DEFAULT 's',
  `propina` decimal(5,2) NOT NULL DEFAULT '0.00',
  PRIMARY KEY (`extraID`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_spanish2_ci AUTO_INCREMENT=24 ;


Desde una aplicacion web estoy intentando hacer una SELECT filtrando por 3 variables ( usuario, local y año)
En teoria seria lo siguiente:
Código:
select * from extras WHERE YEAR(fecha) = '2014' AND pago_asoc = '*' AND local = 'Casa' AND usuario = 'Santi' 

El problema es que no siempre se dan los 3 parametros desde la aplicacion.
Por ejemplo a veces necesito conocer las extras de Santi en 2014 en TODOS LOS LOCALES.
Habia pensado en esto:
Código:
select * from extras WHERE YEAR(fecha) = '2014' AND pago_asoc = '*' AND local = '*' AND usuario = 'Santi' 
pero por las pruebas que he echo el * no funciona en los WHERE (lo que tiene todo el sentido del mundo desde mi punto de vista)

Si conocen algun tipo de forma para arreglar esto os lo agradezco. Estoy intentando arreglarlo desde el apartado de php pero desde ahi lo veo mas complicado.

Gracias de antemano.


En línea

madara1412

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Re: Consulta con un numero variable de condiciones
« Respuesta #1 en: 22 Agosto 2014, 23:07 pm »

Código:
select * from extras WHERE YEAR(fecha) = '2014' AND pago_asoc = '*' AND usuario = 'Santi' 

como nesesitas saver todos los locales lo ideal es no poner condicion al quitar la condicion de local se asume que seran todos que cumplan las condiciones como 2014 y santi


En línea

santi810

Desconectado Desconectado

Mensajes: 21


Ver Perfil
Re: Consulta con un numero variable de condiciones
« Respuesta #2 en: 22 Agosto 2014, 23:50 pm »

era un ejemplo, otras veces necesitare saber las extras de todos los usuarios en local=casa durante el 2014, y otras las de santi en casa etc
En línea

Carloswaldo
Traductor
Moderador Global
***
Desconectado Desconectado

Mensajes: 4.764


Nos reservamos el derecho de ban.


Ver Perfil WWW
Re: Consulta con un numero variable de condiciones
« Respuesta #3 en: 28 Agosto 2014, 22:03 pm »

¿De qué gestor de base de datos estamos hablando? Voy a asumir MySQL.

Podrías intentar hacer algo como esto, por ejemplo:

Código
  1. SELECT * FROM extras WHERE (@LOCAL IS NULL OR LOCAL = @LOCAL)

Eso te retornará todos los registros en el caso de que @local no esté definido (sea null) y aplicará el filtro en caso de que sí esté definido.

También puedes simplificarlo un poco con COALESCE

Código
  1. SELECT * FROM extras WHERE LOCAL = COALESCE(@LOCAL,LOCAL)

Siguiendo esa lógica puedes construir el resto de la consulta.
En línea





Dominio en venta: https://forojapones.com/
JorgeEMX
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.615



Ver Perfil WWW
Re: Consulta con un numero variable de condiciones
« Respuesta #4 en: 31 Agosto 2014, 15:45 pm »

Si conocen algun tipo de forma para arreglar esto os lo agradezco. Estoy intentando arreglarlo desde el apartado de php pero desde ahi lo veo mas complicado.

Ps más bien, a mi me parece una tontera hacer un consulta muy general para estos casos. Los mejor sería sacar una consulta a medida desde PHP.

Si el campo local siempre lleva un tipo de local, que no sea vacío, sería (como te comentan arriba):

Código
  1. SELECT * FROM extras WHERE YEAR(fecha) = '2014' AND LOCAL IS NOT NULL AND usuario = 'Santi'

Tal vez hasta te interese agruparlo:

Código
  1. SELECT * FROM extras WHERE YEAR(fecha) = '2014' AND LOCAL IS NOT NULL AND usuario = 'Santi' GROUP BY LOCAL

Lo mismo aplica para la otra variable. El problema de hacer esto, es que a nivel de código deberás identificar que sentencia llamar.
En línea

Carloswaldo
Traductor
Moderador Global
***
Desconectado Desconectado

Mensajes: 4.764


Nos reservamos el derecho de ban.


Ver Perfil WWW
Re: Consulta con un numero variable de condiciones
« Respuesta #5 en: 31 Agosto 2014, 15:50 pm »

El problema con eso es que el código en php va a ser muy extenso porque tendrá que hacer una consulta por cada situación (una para cuando no hayan todos los datos, otra cuando falte fecha, otra cuando falte fecha y local, otra cuando falte solo local, etc...)

Ya depende de lo que le venga a ser más práctico.
En línea





Dominio en venta: https://forojapones.com/
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Alacenar numero de string en variable [python]
Scripting
Ricardo95 2 3,573 Último mensaje 9 Abril 2011, 23:11 pm
por Novlucker
concatenar numero y variable
Desarrollo Web
kakashi20 1 3,153 Último mensaje 8 Noviembre 2011, 23:03 pm
por madpitbull_99
Consulta con numero de parametros variable (PDO)
PHP
i-node 2 2,257 Último mensaje 28 Febrero 2014, 13:54 pm
por segurolas.es
Consulta sobre condiciones y saltos
ASM
zonahurbana 9 7,581 Último mensaje 18 Mayo 2014, 02:28 am
por xv0
Consulta entre dos condiciones
Bases de Datos
desdeferrol 0 2,249 Último mensaje 16 Abril 2016, 22:12 pm
por desdeferrol
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines