Foros del Web » Programando para Internet » PHP »

3 Where opcionales en una consulta

Estas en el tema de 3 Where opcionales en una consulta en el foro de PHP en Foros del Web. Teno un sistema que van saliendo imagenes el Azar, quiero poner un filtro para que solo salgan de el tipo que quiera el usuario. e ...
  #1 (permalink)  
Antiguo 17/12/2009, 06:53
Avatar de angel1993  
Fecha de Ingreso: octubre-2009
Mensajes: 752
Antigüedad: 15 años, 1 mes
Puntos: 22
3 Where opcionales en una consulta

Teno un sistema que van saliendo imagenes el Azar, quiero poner un filtro para que solo salgan de el tipo que quiera el usuario.
e creado esto es un poco chapuza creo yo xDD pero no se me ocurre otra cosa

<?php if ($_COOKIE["raza"]=="Todas")
{
$razac=NULL;
echo "Todas";
}
else
{
$razac='WHERE raza='.$_COOKIE["raza"];
echo $_COOKIE["raza"];
}?>


<?php

if ($_COOKIE["ciudad"]=="Todas"){
$ciudadc=NULL;
echo "Todas";
}else{
if ($_COOKIE["raza"]=="Todas")
{
$ciudadc='WHERE ciudad='.$_COOKIE["ciudad"];
}
else
{
$ciudadc='AND ciudad='.$_COOKIE["ciudad"];
echo $_COOKIE["ciudad"];
}}?>

<?php
if ($_COOKIE["sexso"]=="Ambos"){
$sexsoc=NULL;
echo "Ambos";
}else{
if ($_COOKIE["ciudad"]=="Todas"){
if ($_COOKIE["raza"]=="Todas"){
$ciudadc='WHERE ciudad='.$_COOKIE["ciudad"];
}}else{
$sexsoc='AND sexso='.$_COOKIE["sexso"];
echo $_COOKIE["sexso"];
}}
?>

Y en la consulta e puesto
select * from usuarios $razac $sexsoc $ciudadc
Pero no funciona :) ¿que puedo hacer?
Las el rand de las imágenes las hago así.
Ese Select es el que uso para sacar la ID que necesito luego lo añado a otro select que es el que lo muestra..
El rand lo ago con el select de arriba y con
Código PHP:
while ($row5=mysql_fetch_array($sql5))
{
$perros[++$s]=$row5[id];
}
$countperros=count($perros);
if (
$_REQUEST["perroid"]==NULL)
{
$randperros=rand(1,$countperros);
}
else
{
$randperros=$_REQUEST["perroid"];
}
$randperros2=rand(1,$countperros); 
  #2 (permalink)  
Antiguo 17/12/2009, 08:14
 
Fecha de Ingreso: julio-2009
Ubicación: .mysql_error ( XD )
Mensajes: 554
Antigüedad: 15 años, 4 meses
Puntos: 13
Respuesta: 3 Where opcionales en una consulta

Cita:
select * from usuarios $razac $sexsoc $ciudadc
que tipo de consulta es esa?
a eso te refieres con los 3 where?

entonces seria asi:

Código SQL:
Ver original
  1. SELECT * FROM usuarios WHERE razac = '$razac' AND sexsoc = '$sexsoc' AND ciudadc = '$ciudadc'

nos cuentas!
__________________
Mi Bosque de Sombras Solo Doom Metal!

por favor use esta etiqueta para publicar su código --->[HIGHLIGHT]
  #3 (permalink)  
Antiguo 17/12/2009, 08:47
Avatar de zeuslife  
Fecha de Ingreso: enero-2008
Ubicación: Madrid
Mensajes: 533
Antigüedad: 16 años, 10 meses
Puntos: 11
Respuesta: 3 Where opcionales en una consulta

Claro que si, no has usado ni operadores lógicos, ni comillas ni nada... eso es un gran fallo!!

Un Saludo!
__________________
Neversyn Software e Ingeniería
  #4 (permalink)  
Antiguo 17/12/2009, 09:20
Avatar de darkasecas  
Fecha de Ingreso: marzo-2005
Ubicación: SantaCata, NL, Mexico
Mensajes: 1.553
Antigüedad: 19 años, 8 meses
Puntos: 77
Respuesta: 3 Where opcionales en una consulta

Por que "no funciona"? marca error? no devuelve los resultados esperados? probaste imprimiendo la consulta generada y ejecutandola directamente en tu bd?
  #5 (permalink)  
Antiguo 17/12/2009, 11:06
Avatar de dggluz  
Fecha de Ingreso: abril-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 525
Antigüedad: 15 años, 6 meses
Puntos: 50
Respuesta: 3 Where opcionales en una consulta

Twonex y Zeuslife: en realidad, esas variables contienen código SQL, de modo que si estuviera bien hecho debería funcionar. Sin embargo es una forma muy desprolija de armar una consulta. La forma que yo haría es:
Código PHP:
$sql="SELECT * FROM usuarios WHERE 1=1";
if(isset(
$_COOKIE['ciudad']))
{
    
$sql.=" AND ciudad='".$_COOKIE['ciudad']."'";
}
if(isset(
$_COOKIE['sexso']))        // ¿Es un nuevo SO? La forma correcta de escribirlo es "sexo"
{
    
$sql.=" AND sexso='".$_COOKIE['sexso']."'";
}
if(isset(
$_COOKIE['raza']))        // ¿"raza"?, espero que se trate de perros, porque entre los humanos no existen razas
{
    
$sql.=" AND raza='".$_COOKIE['raza']."'";
}
$sql.=";"
¡Suerte!
  #6 (permalink)  
Antiguo 17/12/2009, 13:20
Avatar de angel1993  
Fecha de Ingreso: octubre-2009
Mensajes: 752
Antigüedad: 15 años, 1 mes
Puntos: 22
Respuesta: 3 Where opcionales en una consulta

No funciona.. :S
hay cosas que no entiendo
WHERE 1=1 (¿para que es?)
1=1"; (¿si pones eso (las comillas y el punto y coma) no se cierra el select? entonces los if de abajo no sirvern..)
isset que hace exactamente?
Son perros xD si fuesen humanos pondra nacionalidad.
  #7 (permalink)  
Antiguo 17/12/2009, 13:26
Avatar de zeuslife  
Fecha de Ingreso: enero-2008
Ubicación: Madrid
Mensajes: 533
Antigüedad: 16 años, 10 meses
Puntos: 11
Respuesta: 3 Where opcionales en una consulta

Claro que si @dggluz...para que poner 1=1? Simplemente con poner SELECT * FROM usuarios te daria el mismo resultado. isset comprueba si existe, si está asignada esa variable. Pero, sinceramente, ese código que has puesto @dggluz me parece demasiado complicado para lo que hay que hacer. Es muy raro que te falle la consulta de la otra forma... ¿Puedes postearnos el código que has hecho con esa consulta?

Un Saludo!
__________________
Neversyn Software e Ingeniería
  #8 (permalink)  
Antiguo 17/12/2009, 13:27
Avatar de darkasecas  
Fecha de Ingreso: marzo-2005
Ubicación: SantaCata, NL, Mexico
Mensajes: 1.553
Antigüedad: 19 años, 8 meses
Puntos: 77
Respuesta: 3 Where opcionales en una consulta

Cita:
Iniciado por angel1993 Ver Mensaje
No funciona.. :S
hay cosas que no entiendo
WHERE 1=1 (¿para que es?)
1=1 siempre devolvera TRUE, y se pone para que, de laforma en que se construye la consuta, esta sea valida si no se selecciona ninguna de las opciones

Cita:
1=1"; (¿si pones eso (las comillas y el punto y coma) no se cierra el select? entonces los if de abajo no sirvern..)
No, no "se cierra el select", eso solo termina la linea de codigo de php que asigna un valor a una cadena, despues de esto se puede concatenar mas texto a esta (usando el operador .)

Cita:
isset que hace exactamente?
Son perros xD si fuesen humanos pondra nacionalidad.
isset devuelve TRUE si la variable que se le pasa como parametro existe y no es NULL, en caso contrario devuelve FALSE


Also
Cita:
Iniciado por darkasecas
Por que "no funciona"? marca error? no devuelve los resultados esperados? probaste imprimiendo la consulta generada y ejecutandola directamente en tu bd?
  #9 (permalink)  
Antiguo 17/12/2009, 17:17
Avatar de dggluz  
Fecha de Ingreso: abril-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 525
Antigüedad: 15 años, 6 meses
Puntos: 50
Respuesta: 3 Where opcionales en una consulta

Gracias Darkasecas, excelentemente expresado. El "1=1" está para poder poner el WHERE de la búsqueda sin preocuparse por los demás parámetros; luego, compruebas con un if cada parámetro que quieras añadir, de modo que éstos sean independientes el uno del otro. ¡Suerte!
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 13:13.