Foros del Web » Programando para Internet » PHP »

buscador que liste resultados por categoria

Estas en el tema de buscador que liste resultados por categoria en el foro de PHP en Foros del Web. Saludos phperos... Tengo una pagina que tiene un buscador, pero cuando me lista los resultados me los lista todos sin diferenciar la categoria y subcategoria ...
  #1 (permalink)  
Antiguo 08/03/2007, 19:11
 
Fecha de Ingreso: junio-2003
Ubicación: Isla de Margarita
Mensajes: 22
Antigüedad: 20 años, 9 meses
Puntos: 0
buscador que liste resultados por categoria

Saludos phperos...

Tengo una pagina que tiene un buscador, pero cuando me lista los resultados me los lista todos sin diferenciar la categoria y subcategoria donde esta creado...
la pregunta es: hay alguna forma de mostrar en la pagina de resultado cada resultado con su categoria y su subcategoria??

esta es la funcion que usa el buscador


Código PHP:
<;?
// Este archivo ha sido descargado de ww.programacionweb.net
// y contiene 3 funciones útiles para la búsqueda en una base de datos
// para instrucciones: programacionweb.net/articulos/articulo/?num=260

function buscar($sTabla,$aCampos,$cDb,$iPaginas 10){
  global 
$iTotal,$aResultados;
  
$_GET['pag'] *= 1;
  
$aPalabras split(' ',addslashes($_GET['q']));
  foreach(
$aPalabras as $sPalabra)if($sPalabra != ''){
    
$preq .= " AND ( 0";
    foreach(
$aCampos as $sCampo)$preq .= " OR $sCampo LIKE '%".$sPalabra."%'";
    
$preq .= ")";
  }
  
$iTotal mysql_result(mysql_query("SELECT COUNT(".$aCampos[0].") FROM `$sTabla` WHERE 1$preq",$cDb),0);
  
$aResultados=mysql_query("SELECT * FROM `$sTabla` WHERE 1$preq LIMIT ".($_GET['pag']*$iPaginas).",$iPaginas",$cDb);
}
function 
paginar($iPaginas 10){
  global 
$iTotal;
  
$iFinal = ($_GET['pag']+<; $iTotal/$iPaginas)?$_GET['pag']+6:round($iTotal/$iPaginas);
  
$iInicio = ($_GET['pag']-0)?$_GET['pag']-5:0;
  for(
$iTemp $iInicio$iTemp <; $iFinal$iTemp++){
     echo ((
$iTemp == $_GET['pag'])?$iTemp+1:'<;a href="?q='.$_GET['q'].'&pag='.$iTemp.'">'.($iTemp+1).'<;/a>').' ';
  }
  if(
$_GET['pag']+<; $iTotal/$iPaginas)echo '...';
  if(
$iTotal == 0)echo 'No se han encontrado resultados para su busqueda.';
}
function 
mostrar($sTitulo,$sTexto,$sId,$sUrl,$iPaginas 10){
  global 
$aResultados;
  
$aPalabras split(' ',$_GET['q']);
  while (
$aResultado mysql_fetch_array($aResultados)){
    foreach(
$aPalabras as $sPalabra)if($sPalabra != ''){
      
$iPos strpos(strtolower($aResultado[$sTexto]),strtolower($sPalabra));
      if(!isset(
$iMin) || ($iMin $iPos))$iMin $iPos;
    }
    
$sVistaPrevia substr($aResultado[$sTexto],($iMin-15 0)?$iMin-15:0300);
    
$aVistaPrevia explode(' ',$sVistaPrevia);
    if(
$iMin != 0)array_shift($aVistaPrevia);
    
array_pop($aVistaPrevia);
    
$sVistaPrevia htmlentities(implode(' ',$aVistaPrevia));
    foreach(
$aPalabras as $sPalabra)if(($sPalabra != '') && $sPalabra != 'b')$sVistaPrevia eregi_replace($sPalabra,'<;b>'.$sPalabra.'<;/b>',$sVistaPrevia);
    echo 
"<;br><;b><;a href=\"".$sUrl.$aResultado[$sId]."\">".substr($aResultado[$sTitulo],0,50)."<;/a><;/b><;br>".$sVistaPrevia."<;br><;a href=\"".$sUrl.$aResultado[$sId]."\">Ver detalles<;/a><;br>";
    
$it 1;
  }
}
?> 

y este es el codigo que esta en la pagina de resultados del buscador:



Código PHP:
<;?php
include("func/f_buscador.php");
$conexion a la BBDD
?>


<;?php
//array de la tabla
$arr_pros[0] = "nombre";
$arr_pros[1] = "mini_descripcion";
$arr_pros[2] = "descripcion";
$arr_pros[3] = "precio";
$arr_pros[4] = "referencia";
$arr_pros[5] = "fabricante";

buscar("productos",$arr_pros,$linko,10);

mostrar("nombre","mini_descripcion","idpro","detalle_pro.php?id=",10);
?> 
cabe destacar que en la bbdd hay una tabla que contiene la categoria y otra que contiene la subcategoria... y cada producto en su tabla tiene definido a que categoria y subcategoria pertenece... Saludos y espero su ayuda
  #2 (permalink)  
Antiguo 08/03/2007, 19:27
Avatar de ElJavista
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: Lima Perú
Mensajes: 2.231
Antigüedad: 17 años, 1 mes
Puntos: 67
Re: buscador que liste resultados por categoria

La única forma que se me ocurre es que haga primero una busqueda de categorías. Lógicamente le obtendrá categoría por categoría en cada while, bueno, entonces hace otra búsqueda pero esta vez busque los registros por categoría, algo asi

select * from tabla where categoria = '$cat'

se supone que $cat es el valor de la categoría obtenida en la primera consulta. Bueno, ahora tiene los resultados categoría por categoría, pues, solo falta darle forma.
  #3 (permalink)  
Antiguo 08/03/2007, 19:39
 
Fecha de Ingreso: junio-2003
Ubicación: Isla de Margarita
Mensajes: 22
Antigüedad: 20 años, 9 meses
Puntos: 0
Re: buscador que liste resultados por categoria

gracias por tu rapida respuesta.. te explico un poco...

la pagina es de repuestos automotrices...

la categoria lista el modelo del carro y la subcategoria lista el año del mismo.. cuando uno utiliza el buscador y pone la palabra "bujia" el lista todas las bujias de la base de datos sin decir de que modelo de carro ni de que año es... y es molesto revisar articulo por articulo para saber cual necesitas... por eso me gustaria que listara antes del producto categoria y subcategoria de esta forma o algo parecido:

Sentra (categoria)
1992 (subcategoria)
Bujia
1994 (subcategoria)
Bujia
1998 (subcategoria)
Bujia

espero me entiendan... y ayuden...
PD: estoy empezando con el php asi que en cuanto tengan algo que pueda solucionar vemos como agregarlo al codigo que tengo...
  #4 (permalink)  
Antiguo 08/03/2007, 19:57
Avatar de ElJavista
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: Lima Perú
Mensajes: 2.231
Antigüedad: 17 años, 1 mes
Puntos: 67
Re: buscador que liste resultados por categoria

Ya se va aclarando mejor las cosas pero no se las estructuras de tus tablas, si son una o dos, no se, indícalo.
  #5 (permalink)  
Antiguo 08/03/2007, 20:54
 
Fecha de Ingreso: junio-2003
Ubicación: Isla de Margarita
Mensajes: 22
Antigüedad: 20 años, 9 meses
Puntos: 0
Re: buscador que liste resultados por categoria

tengo una tabla de categoria:
1 campo llamado idcat (auto-increment)
1 campo llamado nombre

una tabla de subcategoria:
1 campo llamado idsubcat (auto-increment)
1 campo llamado nombre
1 campo llamado idcat

una tabla productos:
1 campo idpro (auto-increment)
1 campo idcat
1 campo idsubcat
y los demas (nombre,descripcion, precio, etc)

yo creo que con los campos idcat y idsubcat de la tabla de productos puedo leer el nombre en la tabla categoria y subcategoria para mostrarlo encima del producto, eso creo... pero no se como implementarlo en el codigo... corrijeme si me equivoco...
  #6 (permalink)  
Antiguo 09/03/2007, 07:08
Avatar de carlosmbrizuela  
Fecha de Ingreso: enero-2007
Ubicación: La Plata (Argentina)
Mensajes: 490
Antigüedad: 17 años, 3 meses
Puntos: 1
Re: buscador que liste resultados por categoria

Cre que lo que tenes que haces es dos while anidados
Código PHP:
while (categoria)
       {
     
imprimis la categoria
     
while (subcategoria)
              {
             
imprimis las subcategorias
           
}
   } 
A esto se lo llama corte de control

espero que te sirva.

saludos
__________________
http://www.rollermountain.com
  #7 (permalink)  
Antiguo 09/03/2007, 11:58
 
Fecha de Ingreso: junio-2003
Ubicación: Isla de Margarita
Mensajes: 22
Antigüedad: 20 años, 9 meses
Puntos: 0
Re: buscador que liste resultados por categoria

saludos carlos... podrias decirme en que parte tengo que aplicar esto en la pagina de funcion o en la pagina que muestra los resultados?? que me recomiendas?? no tengo mucho conocimiento de php... gracias..

Última edición por nelsongn; 10/03/2007 a las 13:11
  #8 (permalink)  
Antiguo 12/03/2007, 22:40
Avatar de carlosmbrizuela  
Fecha de Ingreso: enero-2007
Ubicación: La Plata (Argentina)
Mensajes: 490
Antigüedad: 17 años, 3 meses
Puntos: 1
Re: buscador que liste resultados por categoria

en la pagina que muestra los resultados. Debes hacer dos querys una para las categorias y otra por la subcategorias. El primer while itera sobre la primera query la segunda sobre el segundo while.

ejemplo:

Código PHP:
$sql1="select * from categoria";
$res1=mysql_query($sql1);
while (
$row1 mysql_fetch_array($res1))
   {
$id=$row1['idcategoria']
     echo 
$row1['nombrecategoria'];
     
$sql2="select * from subcategoria where idcategoria = $id";
     
$res1=mysql_query($sql2); 
     while (
$row2 mysql_fetch_array($res2))
     {
       echo 
$row2['nombresubcategora'];
      }
    } 
Espero te ayude...


saludos
__________________
http://www.rollermountain.com

Última edición por carlosmbrizuela; 12/03/2007 a las 22:47
  #9 (permalink)  
Antiguo 13/03/2007, 00:42
Avatar de vevni  
Fecha de Ingreso: julio-2005
Ubicación: cancun mexico
Mensajes: 598
Antigüedad: 18 años, 9 meses
Puntos: 3
Re: buscador que liste resultados por categoria

select productos.nombre, productos.descripcion, productos.precio,
categoria.nombre, subcategoria.nombre from productos,categoria,subcategoria where producto.nombre=%patro_busqueda% and productos.idcat=categoria.idcat and productos.idsubcat=subcategoria.idsubcat;


ahora no entiendo pork expecificas doble relacion, pones en productos las relaciones hacia cat y subcategoria de ese prodc. y asu vez en cat, haces relacion a sub cat.....

esa consulta que te puse arriba debe sacar por ejemplo si pones bujia, te debe de mostrar su info, y la cat y subcategoria que pertenece...

ahora, se puede hacer de otra forma, tomando en cuenta la rel que tienes de cat y subcategoria..

select productos.nombre, productos.descripcion, productos.precio, categoria.nombre, subcategoria.nombre from productos,categoria,subcategoria where producto.nombre=%patro_busqueda% and productos.idcat=categoria.idcat and categoria.idcat=subcategoria.idcat;

espero te sirva esas consultas, son constas SQL, asi k puedes probar metiendas al mysql y ver que te arrojan y ya despues, solo imprimes el resultado.... saludos..
__________________
Código PHP:
echo"hola mundo ver 1221332143.02";
echo
"cuantos usuarios habran impreso hola mundo en el mundo.!???"
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 01:08.