Foros del Web » Programando para Internet » PHP »

Quiero realizar mi buscador interno ayuda

Estas en el tema de Quiero realizar mi buscador interno ayuda en el foro de PHP en Foros del Web. Quisiera realizar mi busacdor interno para mi web para que me ayuden les voy a explicar como esta mi sitio: Mis paginas se crean con ...
  #1 (permalink)  
Antiguo 22/10/2003, 12:50
 
Fecha de Ingreso: mayo-2003
Mensajes: 115
Antigüedad: 21 años, 6 meses
Puntos: 0
Quiero realizar mi buscador interno ayuda

Quisiera realizar mi busacdor interno para mi web para que me ayuden les voy a explicar como esta mi sitio:

Mis paginas se crean con datos de mi base en MySQL

Ejemplo mi sitio es algo similar a esto:

Tengo mi pagina con menus a bebidas, ensaladas, comidas etc.

si abro comidas se abre mi pagina comidas.php con menu que jala de la base de datos de todas las recetas de comidas y si doy click en alguna comida
se abre el link comidas.php?idcom=3

y se muestra la receta de esa comida

basicamente titulo, ingredientes, preparacion,

algunos campos son tipo texto y otros varchar

asi en general funciona mi web para bebidas, ensaladas, etc y otros link como contactenos

como veran son como platillas donde solo cambian los datos segun lo que se escoga.

Ahora yo quisiera un buscador que si yo pongo en buscar "pera" entonces me de links como

ensalada.php?idensalada=4

ensalada.php?idensalada=6

ya que las ensaladas 4 y 6 llevan pera es decir en algun campo de los registros que tengo en la tabla ensaladas tienen la palabara "pera"

Bueno espero que esta explicacion no haya sido tediosa y bajo este esquema me podrian ayudar a realizar mi buscador o mas o menos orientarme en lo siguiente:


* como puedo hacer mis busquedas en la base
* como generaria los links

etc.
  #2 (permalink)  
Antiguo 22/10/2003, 20:52
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Las busquedas debes hacerlas usando SQL .. Consultas "condicionales" y si quieres con opción "LIKE" y comodines (wildcards) para que encuentre .. toda coincidencia ..


SELECT * FROM tabla WHERE campo1 LIKE '%$buscar%' AND otrocampo LIKE '%$buscar%'

y así sucesivamente con todos los campos que quieras buscar de esa tabla.

Si estás trabajando con una tabla para cada producto: una tabla para tus "ensaladas" .. otra para las "bebidas" ... Lo ideal sería que tubieras sólo una tabla para tus "productos" y un campo que defina que tipo de producto es: si es una ensalada, bebida o lo que corresponda .. Así realizarías uno de los principales "conceptos" de las Base de datos que es la "normalización" ..

De esta forma .. los links tuyos apuntaría a un sólo script

productos.php?id=1
productos.php?id=25

Y en tu consulta por ese registro .. ya obtendrías la categoría a la que pertenece ..

A todo esto . una tabla extra para guardar las categorías de tus productos (para mantener la integridad referencial) . y en tu tabla productos para el campo "categoria" .. sólo guardar un identificador (el ID de tu tabla "categoria")

Si tu aplicación ya trabaja con X tablas para cada producto .. (deberías pensarte lo que te propogo o tenerlo en cuenta para una próxima versión o futuras apliaciones tuyas) .. debes realizar tantas consultas como la que puse el ejemplo como tablas tengas .. Te vendría bien usar un array con el nombre de tus tablas (que van en función a tus productos que tengas) . para así ver si apareció el producto en la tabla "bebidas" .. formar el link correspondiente ..

Código PHP:
$array_tablas_productos=array("bebidas","ensaladas","etc");

foreach(
$array_tablas_productos as $tabla){

$sql="SELECT * FROM $tabla WHERE campo1 LIKE '%$buscar%' AND otrocampo LIKE '%$buscar%'";
$consulta=mysql_query($sql);

// cuentas los registros obtenidos con mysql_num_rows() .. o bien usas COUNT() en el SQL y los obtienes con mysql_result() ..

if ($total 1){
  while (
$row=mysql_fetch_array($consulta)){
     echo 
"<a href=$tabla.php?id$tabla=$row['id']>$row['nose']</a>";
  }
}


Mas o menos esa seria la idea .. Un buscador así no es nada optimo .. lo ideal es tener una sóla tabla y usar más SQL en la medida de lo posible ..


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 22/10/2003 a las 20:57
  #3 (permalink)  
Antiguo 23/10/2003, 11:48
 
Fecha de Ingreso: mayo-2003
Mensajes: 115
Antigüedad: 21 años, 6 meses
Puntos: 0
pues de entrada muchas gracias cluster

unas dudas:

- Entonces tendria que buscar tabla por tabla y campo por campo si es que quiero buscar en todos las tablas

- Creo que no podre normalizar ya que los tablas de comidas , bebidas , etc tienen diferentes campos y diferentes plantillas diganmosle asi ¿otra forma, o aunque junte los campos de todas las tablas aunque unos no tendrian valores?.


- ¿como le haria para generar una especie de cache para las busquedas para ahorrar tiepo de procesamiento?

Última edición por esaubl; 23/10/2003 a las 11:52
  #4 (permalink)  
Antiguo 23/10/2003, 11:58
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
(consejo .. Primero implementa el buscador "tabla por tabla" .. usando por ejemplo la técnica que puse en el código .. La busqueda es tabla por tabla y los campos serán los que indiques en tus AND campo LIKE .... )

Las plantillas las puedes generar dinámicamente .. seguro que muchas partes de la presentación coinciden en vários puntos .. El tema de que datos guardas de una "comida" o de una "bebida" .. deberías "generalizarlo" en la medida de los posible .. o por lo menos buscar los productos que más se parezcan (en sus campos) y reducir el nº de tablas que vas a tener que buscar .. así optimizaras tus consultas ..

El tema del caché .. de por sí Mysql si usas conexiones persistentes podría acelerar el proceso a costa de consumo extra de recursos en el servidor .. también creo que se gestiona algo de caché por si sola (Mysql 4.0.x en adelante .. si no me equivoco).

Pero, si quieres hacerlo tu mismo vía programación .. deberás centralizar las llamadas a tu mysql_query() como para poder almacenar los $sql que le mandas a Mysql (sentencias SQL) para poder compararla con la nueva petición que le hagas a Mysql .. así, de esta forma entregarías tu página de la caché (previamente guardada en un archivo de texto plano con su código HTML o el que corresponda y con algún identificador: ejemplo un MD5() basado en time() para el nombre del archivo) como para relacionarlo con ese "$sql" que debes tener almacenado en algún sitios (ejemplo en tu Mysql también ..).


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 23/10/2003, 12:00
 
Fecha de Ingreso: abril-2003
Mensajes: 656
Antigüedad: 21 años, 7 meses
Puntos: 1
No se pero me parece que lo mas optimo teniendo estas limitaciones es que instales un buscador prefabricado en hotscripts tienes muchos y varios gratis ,
uno que no esta mal de muy facil instalacion y gratis :)

http://phpdig.toiletoine.net/

puedes mirar si te sirve


un saludo
  #6 (permalink)  
Antiguo 23/10/2003, 13:18
 
Fecha de Ingreso: mayo-2003
Mensajes: 115
Antigüedad: 21 años, 6 meses
Puntos: 0
gracias jordi la idea es que lo realize yo para que en mi sitio no tenga que poner quien lo realizo ademas sera una buena practica de programacion.

Sobre tu sugerencia lo voy a probar a ver que tal tu ya lo porbaste por si me llego a a atorar, tu lo tienes implementado en algun sitio que pueda ver?


Y gracias Cluster actualemente tengo 6 tablas sobre las que buscaria informacion y a lomejor las podria reducir a 4.

Sobre lo del cache voy a ir guardando en una tabla las url que se generan al buscar tal o cual palabra y en caso de que ya este pues solo amndo las urls


Pues despues de esta etapa de identificacion del problema y de sugerencia voy a empezar a desarrollar mi buscador a ver que tal me va
  #7 (permalink)  
Antiguo 23/10/2003, 14:00
 
Fecha de Ingreso: abril-2003
Mensajes: 656
Antigüedad: 21 años, 7 meses
Puntos: 1
bueno yo le he probado en mi pc, para comprender la mecanica de los buscadores, pues es un codigo bastante claro

y si la verdad funciona bien, y es bastante comprensible como hace para crear el buscador,

Lo que quizas puedes hacer es mirar como esta construido por ver si te sirve y te da ideas para hacerlo tu,

No creo que sea inmoral tomar ideas de otros scripts


un saludo
  #8 (permalink)  
Antiguo 24/10/2003, 15:35
 
Fecha de Ingreso: mayo-2003
Mensajes: 115
Antigüedad: 21 años, 6 meses
Puntos: 0
ok

pues voy a checarlo jordi
  #9 (permalink)  
Antiguo 10/12/2003, 10:12
 
Fecha de Ingreso: agosto-2003
Ubicación: Mexico Df abajo del puente de municipio
Mensajes: 216
Antigüedad: 21 años, 3 meses
Puntos: 0
hola
:P
tengo una duda :P
$sql="SELECT * FROM $tabla WHERE campo1 LIKE '%$buscar%' AND otrocampo LIKE '%$buscar%'";
aki lo reemplaze así.

$sql="SELECT * FROM $tabla WHERE nombre LIKE '%".$palabra."%' AND texto LIKE '%".$palabra."%'";

porque nadamas me aparecen las consultas de nombre y no me aparecen las de texto¿?

ok thanx :P
  #10 (permalink)  
Antiguo 01/12/2005, 01:59
 
Fecha de Ingreso: agosto-2003
Mensajes: 39
Antigüedad: 21 años, 3 meses
Puntos: 0
Pregunta

hola necesito ayudita genero codigo php con el dreamweaver asi que no me sorprenderia que ponga codigo de mas pero paso a mostrarle el codigo y a preguntarles mi duda

este es un recordset que lo uso como motor de la busqueda que viene desde un form
Código PHP:
<?php
$maxRows_Recordset1 
10;
$pageNum_Recordset1 0;
if (isset(
$_GET['pageNum_Recordset1'])) {
  
$pageNum_Recordset1 $_GET['pageNum_Recordset1'];
}
$startRow_Recordset1 $pageNum_Recordset1 $maxRows_Recordset1;

$colname_Recordset1 "1";
if (isset(
$_POST['buscador'])) {
  
$colname_Recordset1 = (get_magic_quotes_gpc()) ? $_POST['buscador'] : addslashes($_POST['buscador']);
}
mysql_select_db($database_conexion$conexion);
$query_Recordset1 sprintf("SELECT * FROM lista_de_hoteles WHERE categoria = '%s' ORDER BY nombre ASC"$colname_Recordset1);
$query_limit_Recordset1 sprintf("%s LIMIT %d, %d"$query_Recordset1$startRow_Recordset1$maxRows_Recordset1);
$Recordset1 mysql_query($query_limit_Recordset1$conexion) or die(mysql_error());
$row_Recordset1 mysql_fetch_assoc($Recordset1);

if (isset(
$_GET['totalRows_Recordset1'])) {
  
$totalRows_Recordset1 $_GET['totalRows_Recordset1'];
} else {
  
$all_Recordset1 mysql_query($query_Recordset1);
  
$totalRows_Recordset1 mysql_num_rows($all_Recordset1);
}
$totalPages_Recordset1 ceil($totalRows_Recordset1/$maxRows_Recordset1)-1;
?>
quisiera que tambien a la vez que busca en el campo categoria busque en el campo nombre no se si se me entiende trate de agregarle el AND como dicen arriba pero no tube buenos resultados

trate de poner asi y directamente no me salia nada no buscaba digamos
Código PHP:
$query_Recordset1 sprintf("SELECT * FROM lista_de_hoteles WHERE categoria AND nombre = '%s' ORDER BY nombre ASC"$colname_Recordset1); 
y si pongo asi me tira un error
Código PHP:
$query_Recordset1 sprintf("SELECT * FROM lista_de_hoteles WHERE categoria = '%s' AND nombre = '%s' ORDER BY nombre ASC"$colname_Recordset1); 
bueno espero su respuesta desde ya muchas gracias :D
  #11 (permalink)  
Antiguo 01/12/2005, 03:05
Avatar de refineriaweb  
Fecha de Ingreso: junio-2004
Ubicación: Palma de Mallorca
Mensajes: 196
Antigüedad: 20 años, 5 meses
Puntos: 1
yo consegui una busqueda por fecha

Hola, yo consegui modificando un codigo y con ayuda de Seppo (forista) crear una busqueda por fecha. Tengo en el form de submit un checkbox que escribiendo en el input type text ej: 2005-12-01

me saca los resultados de mi campo de la tabla de la base de datos (sentdate), pero y los que son iguales a la fecha que busco me los marca en rojo, pero me los lista todos :(

Estoy mirando que los resultados solo sean los que busco. Asi que si alguien se anima.

Te pongo aqui el codigo por si algo te sirve:
Código PHP:
if (isset($_GET['search_in_sentdate'])) 
            { 
                
// show user results 
                
$sentdate_output join (''file (SCRIPT_PATH.'modules/admin/search/templates/functions/search_results_sentdate.tpl')); 
                
$this->query_result $db->db_query('SELECT id,user,category,subject,sentdate FROM tickets WHERE (sentdate >= "%'.$_GET['search'].'%") OR (sentdate <= "%'.$_GET['search'].'%")'); 
                
$numrows $db->db_num_rows($this->query_result); 
                
$i 0
                while (
$row $db->db_fetch_array($this->query_result)) 
                { 
                    
$row['user'] = eregi_replace($_GET['search'],'<font color="red"><b>'.$_GET['search'].'</b></font>',$row['user']); 
                    
$row['subject'] = eregi_replace($_GET['search'],'<font color="red"><b>'.$_GET['search'].'</b></font>',$row['subject']); 
                    
$row['sentdate'] = eregi_replace($_GET['search'],'<font color="red"><b>'.$_GET['search'].'</b></font>',$row['sentdate']); 
                    
$row['category'] = eregi_replace($_GET['search'],'<font color="red"><b>'.$_GET['search'].'</b></font>',$row['category']); 
                     
                     
                    
$sentdate_results[$i] = $sentdate_output
                    
$sentdate_results[$i] = str_replace('{ID}',$row['id'],$sentdate_results[$i]); 
                    
$sentdate_results[$i] = str_replace('{USER}','<a href="'.$_SERVER['PHP_SELF'].'?tpl=tickets_show_ticket&lang='.LANGUAGE.'&id='.$row['id'].'">'.$row['user'].'</a>',$sentdate_results[$i]); 
                    
$sentdate_results[$i] = str_replace('{SUBJECT}','<a href="'.$_SERVER['PHP_SELF'].'?tpl=tickets_show_ticket&lang='.LANGUAGE.'&id='.$row['id'].'">'.$row['subject'].'</a>',$sentdate_results[$i]); 
                    
$sentdate_results[$i] = str_replace('{CATEGORY}','<a href="'.$_SERVER['PHP_SELF'].'?tpl=tickets_show_ticket&lang='.LANGUAGE.'&id='.$row['id'].'">'.$row['category'].'</a>',$sentdate_results[$i]); 
                    
$sentdate_results[$i] = str_replace('{SENTDATE}','<a href="'.$_SERVER['PHP_SELF'].'?tpl=tickets_show_ticket&lang='.LANGUAGE.'&id='.$row['id'].'">'.$row['sentdate'].'</a>',$sentdate_results[$i]); 
                    
$i++; 
                } 
                if (
$numrows == 0
                { 
                    
$sentdate_results = array(); 
                } 
                
$output str_replace('{RESULTS_SENTDATE}',$numrows.' {LANG_SEARCH_SENTDATE_RESULTS}<br>'.implode('',$sentdate_results),$output); 

Última edición por Cluster; 01/12/2005 a las 05:32
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:06.