Foros del Web » Programando para Internet » PHP »

Ignorar una palabra de una busqueda

Estas en el tema de Ignorar una palabra de una busqueda en el foro de PHP en Foros del Web. Hola, he colocado un pequeño buscador interno en mi web, y quisiera saber si hay alguno forma de ignorar palabras en la busqueda al solicitar ...
  #1 (permalink)  
Antiguo 13/04/2003, 09:24
MMU
Invitado
 
Mensajes: n/a
Puntos:
Ignorar una palabra de una busqueda

Hola, he colocado un pequeño buscador interno en mi web, y quisiera saber si hay alguno forma de ignorar palabras en la busqueda al solicitar la informacion de la base de datos, por ejemplo cuando se coloca cualquier frase que tenga la palabra "web" se vuelve loco, esta repetida infinitas veces, y quiero que la ignore. Se puede hacer con alguna sentencia, o alguna forma.

Muchisimas gracias
  #2 (permalink)  
Antiguo 13/04/2003, 10:24
MMU
Invitado
 
Mensajes: n/a
Puntos:
Bueno si no es posible, me conformaria con que la busqueda en mysql fuera completa, por ejemplo si busco "diseño web" no me aparezca sexo web, porque contiene la palabra web.

Gracias
  #3 (permalink)  
Antiguo 13/04/2003, 14:59
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Pues si no pones el código del buscador que usas .. no te podrémos dar una solución personalizada .. Implementar un "buscador" se puede hacer de mil formas dependiendo como te organices los datos (justo en tu 2º mensaje aparece que usas Mysql .. ) ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #4 (permalink)  
Antiguo 13/04/2003, 15:08
MMU
Invitado
 
Mensajes: n/a
Puntos:
Ops, perdona, si es que se me va la olla, te paso el codigo:

<?

$pp=10;
$start=intval($start);
$o=intval($o);

$q=mhtml($q);
$title=$q;


function hl($str) {
GLOBAL $lq;
$str=" ".$str;

$ph=explode(" ",$lq);
$lstr=mysql_result(mysql_query("SELECT lower('$str')"),0,0);

for ($i=0;$i<count($ph);$i++) {
$lstr=eregi_replace($ph[$i],"<b><font color=red>".$ph[$i]."</font></b>",$lstr);
}

$p1=1;$p2=1;
while ($p1!=0 && $p2!=0) {
if (($p1=strpos($lstr,"<b><font color=red>"))!=0) {
$lstr[$p1]="|";
$str=substr($str,0,$p1)."<b><font color=red>".substr($str,$p1);

if (($p2=strpos($lstr,"</font></b>"))!=0) {
$lstr[$p2]="|";
$str=substr($str,0,$p2)."</font></b>".substr($str,$p2);
}
}
}

$str=substr($str,1);
return($str);
}

$template=$TMPL["brokenscript"];
$template=str_replace("%YESTEXT",$LANG["yes"],$template);
$template=str_replace("%NOTEXT",$LANG["no"],$template);
$template=str_replace("%BROKENSURETEXT",$LANG["brokensure"],$template);
print $template;

$sform=$TMPL["searchform"];
$sform=str_replace("%SEARCHTEXT",$LANG["search"],$sform);
$sform=str_replace("%QUERYTEXT",$q,$sform);

print $sform;

$q=trim($q);
if (empty($q)) {
print "<P><font color=red>".$LANG["emptyquery"]."</font></P>";
$total=0;
}
else {
$order="ORDER BY gin DESC,gout DESC";
if ($o==1) $order="ORDER BY title";
if ($o==2) $order="ORDER BY moder_vote DESC";

$lq=mysql_result(mysql_query("SELECT lower('$q');"),0,0);

$uq=mysql_result(mysql_query("SELECT upper('$q');"),0,0);

$likes="";
$ph=explode(" ",$uq);
for ($i=0;$i<count($ph);$i++) {
$pq="%".$ph[$i]."%";
$likes.=" OR UPPER(description) like '$pq'";
$likes.=" OR UPPER(title) like '$pq'";
$likes.=" OR UPPER(url) like '$pq'";
}
$likes=substr($likes,4);

$rr=mysql_query("SELECT count(*) FROM main WHERE type=1 AND ($likes)") or die(mysql_error());
$total=mysql_result($rr,0,0);
$r=mysql_query("SELECT * FROM main WHERE type=1 AND ($likes) $order LIMIT $start,10") or die(mysql_error());

$c=mysql_num_rows($r);

$template=$TMPL["searchtop"];
$template=str_replace("%STARTNUM",$start+1,$templa te);
print $template;

while ($ar=mysql_fetch_array($r)) {
$admin="";
if (isset($sid)) {
$admin.="<font color=black size=-3> [<a href=admin/edit.php?lid=".$ar["lid"]."&type=255 class=slink>".$LANG["edit"]."</a>] [";
for ($j=1;$j<11;$j++) {
if ($j==$ar["moder_vote"]) $admin.="<B>".$j."</B> ";
else $admin.="<a href=admin/vote.php?lid=".$ar["lid"]."&vote=$j&type=255 class=slink>".$j."</a> ";
}
$admin.="]</font>";
}

$template=$TMPL["linksbit"];
$template=str_replace("%ID",$ar["lid"],$template);
$template=str_replace("%TITLE",hl($ar["title"]),$template);
$template=str_replace("%GIN",$ar["gin"],$template);
$template=str_replace("%GOUT",$ar["gout"],$template);
$template=str_replace("%MODERVOTE",$ar["moder_vote"],$template);
$template=str_replace("%DESC",hl($ar["description"]),$template);
$template=str_replace("%BEST","<img src=./cat/star.gif width=15 height=16 hspace=3>",$template);
$template=str_replace("%BOROKENTEXT",$LANG["broken"],$template);
$template=str_replace("%ADMINIFACE",$admin,$templa te);
print $template;
}

$template=$TMPL["searchbottom"];
}
if ($c==0) {
print "<P>".$LANG["notfound"]."</P>\n";
}

print "<table cellspacing=0 cellpadding=0 border=0 width=100% bgcolor=#E0E0E0><tr><td><img src=/images/none.gif width=1 height=1></td></tr></table>";
print "<P>".$LANG["pagesfound"].": <B>".$total."</B>";

if ($total>$pp) {
print "<center><br>";
if ($start!=0) print "<a href=./search.php?o=$o&start=0&q=".urlencode($q).">&lt;&l t;</a> | ";
else print "&lt;&lt; | ";
$sstart=$start-60; if ($sstart<0) $sstart=0;
$send=$start+60;if ($send>$total) $send=$total;
for ($i=$sstart;$i<$send;$i+=$pp) {
if ($start==$i)
print "<b>".($i+1)."</b>";
else
print "<a href=./search.php?o=$o&start=$i&q=".urlencode($q).">".($i +1)."</a>";
print " | ";
}
if ($start==$total-$pp)
print "&gt;&gt;";
else
print "<a href=./search.php?o=$o&start=".($i-$pp)."&q=".urlencode($q).">&gt;&gt;</a>";
print "</center>";
}
print "<br>";
?>
  #5 (permalink)  
Antiguo 13/04/2003, 16:05
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Bueno.. no he revisado como funciona exactamente ese buscador .. Se ve que usas Msyql y busca en unos campos q tienes en una tabla ...

El caso que tienes que hacer consultas SQL tipo:

campo_de_tu_tabla NOT LIKE condicion

Para ello tendras que "inventarte" algun caracter de control tipo "-" o algo así delante de la palabra que NO quieras incluir en la busqueda, para evaluar esa cadena de busqueda y componer en consecuencia los OR campo LIKE condicion .. o los: campo NOT LIKE condicion

Tambien recuerda que en Mysql tienes los campos tipo "Full TEXT" .. que dá mas juego a la hora de hacer busquedas .. pero eso ya implicaría cambiar casi por completo el "script" buscador que estas usando ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #6 (permalink)  
Antiguo 14/04/2003, 08:27
MMU
Invitado
 
Mensajes: n/a
Puntos:
Me podrias explicar eso de inventarse un caracter de control tipo "-" que significa?

Muchas gracias
  #7 (permalink)  
Antiguo 14/04/2003, 10:29
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Pues básicamente .. que en tu cadena de busqueda uses por ejemplo:

palabra otrapalabra -estapalabranolaquiero palabra

Si te das cuenta .. en una palabra (entiendase por palabra a letras separadas por un espacio) .. tenemos una de ellas que tiene como primer caracter el - .. ese es el que usaremos para decir a "nuestra lógica" que ese caracter tendrá que formar un NOT LIKE y no un LIKE como en las anteriores ..

Para ello .. esa "cadena de busqueda" .. tienes que desglosarlas en palabras .. Eso, en parte ya lo hace tu lógica:

Código PHP:
$ph=explode(" ",$uq);
for (
$i=0;$i<count($ph);$i++) {
$pq="%".$ph[$i]."%";
$likes.=" OR UPPER(description) like '$pq'";
$likes.=" OR UPPER(title) like '$pq'";
$likes.=" OR UPPER(url) like '$pq'";

Ahora te hace falta .. ver cada "palabra" que ahí lo tienes en $ph[$i] si el primer caracter es un "-" o es distinto .. Si es "-" tendras que hacer:

$likes.=" OR UPPER(url) NOT like '$pq'";

Y si no lo es .. haces lo que ya tienes ...

Trabajalo un poco y ves preguntando las dudas. Revisa el manual de PHP (www.php.net/manual/es) por si alguna función q usa ahí no la conoces .. Y sobre todo piensa que ese "buscador" lo único que está haciendo es "componer" una sentencia SQL (www.mysql.com para mas info)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 21:19.