Retroceder   Foros del Web > Programación para sitios web > Bases de Datos > Mysql

Respuesta
 
Herramientas Desplegado
Antiguo 04-may-2008, 17:13   #1 (permalink)
jovi_javi ha deshabilitado el karma
 
Fecha de Ingreso: enero-2008
Mensajes: 23
consulta multiple con campos con and (Y)

Hola a todos, estoy realizando una consulta un tanto complicada, mi consulta es la siguiente:

"SELECT DATE_FORMAT(camp1, '%d-%m'), camp2, camp3, camp4, DATE_FORMAT(camp5, '%d-%m'), camp6, camp7, camp8, DATE_FORMAT(camp9, '%d-%m'), camp10 FROM BD.TABLA WHERE DATE_FORMAT(camp1, '%d-%m-%Y')='$opera1' AND camp2='$opera2' AND camp3='$opera3' AND camp4='$opera4' AND DATE_FORMAT(camp5, '%d-%m-%Y')='$opera5' AND camp6='$opera6' ";

El caso es el siguiente, como algun campo lo deje en blanco, la consulta no me aroja ningun resultado, y yo quiero dejar algun campo en blanco, puesto que es para hacer un buscador.

Hay alguna forma de cuando algun campo se quede vacio, no cuente esa condicion, y siga con las demas?¿

PD.: Esto se realiza en php+mysql

Gracias.
jovi_javi está desconectado   Responder Citando
Antiguo 05-may-2008, 04:13   #2 (permalink)
quimfv tiene algunos puntos positivos de karma
 
Fecha de Ingreso: marzo-2008
Mensajes: 442
Re: consulta multiple con campos con and (Y)

Puedes usar OR en vez de AND pero luego la busqueda será menos precisa o construir la sentencia Sql en funcion de los campos que tengas llenos.

$Sql="SELECT DATE_FORMAT(camp1, '%d-%m'), camp2, camp3, camp4, DATE_FORMAT(camp5, '%d-%m'), camp6, camp7, camp8, DATE_FORMAT(camp9, '%d-%m'), camp10 FROM BD.TABLA WHERE ";
if ($opera1!=""){
$Sql.="DATE_FORMAT(camp1, '%d-%m-%Y')='$opera1' ";
}
if ($opera1!="" && $opera2'!=""){
$Sql.="AND ";
}
if ($opera2!=""){
$Sql.="camp2='$opera2' ";

...


haz un echo de $Sql para ver que queda bien construida en tiempo de diseño y luego ejecuta la consulta.


(nos van a decir que no se puede poner codigo en este subforo...)

Quim
quimfv está desconectado   Responder Citando
Antiguo 06-may-2008, 02:44   #3 (permalink)
jovi_javi ha deshabilitado el karma
 
Fecha de Ingreso: enero-2008
Mensajes: 23
Re: consulta multiple con campos con and (Y)

Muchas gracia quim me a servido perfectamente, ahora el problema que tengo es que como rellene el primer campo(opera1) y el ultimo campo(opera6) por ejemplo, no me añade ningun (AND) y con lo cual sale un mensaje de error en la consulta.

Gracias.
jovi_javi está desconectado   Responder Citando
Antiguo 06-may-2008, 06:12   #4 (permalink)
quimfv tiene algunos puntos positivos de karma
 
Fecha de Ingreso: marzo-2008
Mensajes: 442
Re: consulta multiple con campos con and (Y)

Tienes razón!!! Pero eso es resoluble a base de condiciones ... te puse un ejemplo incompleto y te dije que miraras si construia bien el SQL...

Este tambien es un ejemplo incompleto, en este caso creo que si lo desarrollas te dará lo que buscas pero asegurate con un echo del Sql. Si le das dos vueltas igual encuentras una manera mas simple de hacerlo, lo importante no es como sinó que tienes que construir el Sql en funcion de los datos que tengas....

$and=false;
$Sql="SELECT DATE_FORMAT(camp1, '%d-%m'), camp2, camp3, camp4, DATE_FORMAT(camp5, '%d-%m'), camp6, camp7, camp8, DATE_FORMAT(camp9, '%d-%m'), camp10 FROM BD.TABLA WHERE ";
if ($opera1!=""){
$Sql.="DATE_FORMAT(camp1, '%d-%m-%Y')='$opera1' ";
}
if ($opera1!="" && $opera2!=""){
$Sql.="AND ";
$Sql.="camp2='$opera2'";
}else{
if ($opera2!=""){
$Sql.="camp2='$opera2'";
}
}
if(($opera1!="" || $opera2!="") && $opera3!="") {
$Sql.="AND ";
$Sql.="camp3='$opera3'";
}else{
if ($opera3!=""){
$Sql.="camp3='$opera3'";
}
}

...


Quim
quimfv está desconectado   Responder Citando
Respuesta

No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 01:44.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93