Foros del Web » Programando para Internet » PHP »

Consulta compleja

Estas en el tema de Consulta compleja en el foro de PHP en Foros del Web. Hola, quería haceros una pregunta. Tengo una tabla con varios datos, lo que necesito es hacer una consulta compleja, es decir, tengo varios check-box con ...
  #1 (permalink)  
Antiguo 07/04/2006, 10:06
 
Fecha de Ingreso: agosto-2004
Ubicación: Valencia
Mensajes: 149
Antigüedad: 13 años, 4 meses
Puntos: 0
Consulta compleja

Hola, quería haceros una pregunta.
Tengo una tabla con varios datos, lo que necesito es hacer una consulta compleja, es decir, tengo varios check-box con opciones diferentes y lo que quiero es que al hacer buscar lo realice bien y me explico.
Puedes seleccionar una de las cinco opciones, o cuatro, tres, etc o ninguna. El problema lo tengo cuando no se elije ninguna, tendría que buscar "todo" lo que coincida con ese campo concreto pero no se hacerlo ya que se lo paso a través de post.
Os pongo el código que utilizo a ver si me podeis ayudar.
Código HTML:
<form name="inicio" method="post" action="buscador.php">
<td><select name="tipo" class="textcaixa"><option value="todo">- - - todos - - -</option><option value="casa_independiente">Casa Independiente</option><option  value="habitaciones_rurales">Habitaciones Rurales</option><option value="apartamentos_rurales">Apartamentos Rurales</option><option value="albergues_rurales">Albergues Rurales</option><option value="bungalows">Cabañas o Bungalows</option></select></td>
	        <td><select name="zona" class="textcaixa"><option value="todos">- - - todas - - -</option><option  value="interior">Interior</option><option  value="costa">Costa</option></select></td>
      <td><select name="situacion" class="textcaixa"><option value="todos">- - - todas - - -</option><option  value="aislada">Aislada</option><option  value="centrica">Céntrica</option><option  value="periferica">Periférica</option></select></td>
      <td><select name="plazas" class="textcaixa"><option value="todos">- - - todas - - -</option><option  value="0">De 1 a 4</option><option value="1">De 5 a 8</option><option  value="2">De 9 a 12</option><option  value="3">De 13 a 16</option><option  value="4">Más de 16</option></select></td>
  	        <td><select name="provincia" class="textcaixa"> 
Tiene algunas opciones más pero es para que veais como funciona, la parte del buscador:
Código PHP:
$sql="SELECT * FROM casas WHERE zona='$zona' AND ubicacion='$situacion' ORDER BY visitas DESC LIMIT ".$limitInf.",".$tamPag;
$res=mysql_query($sql,$conn); 
$numeroRegistros2=mysql_num_rows($res);
while(
$fila mysql_fetch_object($res)) { 
El problema lo tengo al enviar que sea todo, ¿cómo hago la consulta entonces, si le paso la variable concreta es sencillo, pero al ser todo no se como hacerlo, he probado con * y % pero no funciona.
Gracias de antemano.
  #2 (permalink)  
Antiguo 07/04/2006, 10:42
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 14 años, 1 mes
Puntos: 11
Separa la creacion de la variable sql en partes, asi:

Código PHP:
<?php
$sql 
="SELECT * FROM casas";
if(isset(
$_POST['zona']))
   
$sql.=" WHERE zona='".$_POST['zona']."'";

if(isset(
$_POST['situacion']))
{
   if(
instr($sql,"WHERE")!=0)
      
$sql.=" AND ubicacion='".$_POST['situacion']."'";
   else
      
$sql.=" WHERE ubicacion='".$_POST['situacion']."'";
}
?>
  #3 (permalink)  
Antiguo 11/04/2006, 05:44
 
Fecha de Ingreso: agosto-2004
Ubicación: Valencia
Mensajes: 149
Antigüedad: 13 años, 4 meses
Puntos: 0
Muchas gracias claudiovega, voy a ver si fucniona y ya os digo.
Salu2.
  #4 (permalink)  
Antiguo 12/04/2006, 05:56
 
Fecha de Ingreso: agosto-2004
Ubicación: Valencia
Mensajes: 149
Antigüedad: 13 años, 4 meses
Puntos: 0
Al final lo hice así y funciona correctamente, por si a alguien le puede servir.
Código PHP:
$sql ="SELECT * FROM casas";
if(
$tipo!="todos") {
   
$sql.=" WHERE tipo LIKE '$tipo'";
   }
   if (
$zona!="todos") {   
    
$zonas=substr_count($sql,'WHERE');
   if((
$zonas)!=0) {
      
$sql.=" AND zona LIKE '$zona'"; }
   else {
      
$sql.=" WHERE zona LIKE '$zona'"; }
}
   if (
$situacion!="todos") { 
$zonas2=substr_count($sql,'WHERE');
   if((
$zonas2)!=0) {
      
$sql.=" AND ubicacion='$situacion'"; }
   else {
      
$sql.=" WHERE ubicacion='$situacion'"; }
}
   if (
$provincia!="todos") { 
    
$zonas3=substr_count($sql,'WHERE');
   if((
$zonas3)!=0) {
      
$sql.=" AND provincia='$provincia'"; }
   else {
      
$sql.=" WHERE provincia='$provincia'"; }
      }
       if (
$plazas!="todos") { 
    
$zonas4=substr_count($sql,'WHERE');
   if((
$zonas4)!=0) {
      
$sql.=" AND personas='$plazas'"; }
   else {
      
$sql.=" WHERE personas='$plazas'"; }
      }  
      else {
      
$sql.=""; }
    


    
$res=mysql_query($sql,$conn); 
        
$numeroRegistros2=mysql_num_rows($res);
$fila mysql_fetch_object($res); 
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 14:46.