Por: Miguel Anguita | | 30/7/2005
|
La instrucción utilizada es muy rápida pero he encontrado problemas:
SELECT * FROM ARTICULOS WHERE MATCH(TITULO, DESARROLLO) AGAINST ('$busqueda')
Se trata de buscar distintas palabras en varios campos, pero no he
logrado que todas las palabras aparezcan en las búsquedas. Solamente
aparecen registros que contienen alguna (o bien todas) de las palabras,
pero lo útil (o elegible con alguna opción) es que "todas" las palabras
estén en todos los registros seleccionados.
¿Tenésis alguna solución para resolver este problema?.
Gracias por vuestra ayuda y adelante con vuestro magnífico portal.
Muguel Anguita.
Me
parece muy bonito pero solo sirve para bases de datos y no para
archivos comunes he aqui les paso el codigo fuente de un buscador dentro
de un directorio web.
Minibuscador php de NeoRod
Busca un texto, dentro de archivos de un directorio web, y lista los resultados con algun contenido del archivo.
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>by NeoRod</title>
</head>
<body>
<h1>Minibuscador php de NeoRod</h1>
<p>Busca un texto, dentro de archivos de un directorio web, y
lista los resultados con algun contenido del archivo. </p>
<form id="form1" name="form1" method="get">
Buscar Texto en pagina<input type="text" name="q"/>
<input type="submit" value="Buscar" />
</form>
<p>
<?php
$dir = "../colegio"; //colocas la carpeta donde va a buscar los temas
$directorio= @opendir($dir);
if(@opendir($dir)==TRUE)
{
$i=0;
while ($archivo = readdir($directorio))
{
if($archivo != '.')
{
if(!is_dir("$dir/$archivo"))
{
$neo[$i]=$archivo;
$i++;}
}
}
closedir($directorio);
if($_GET["q"]!="")
{
for($j=0;$j<count($neo);$j++)
{
$archivo=$neo[$j];
$fp = fopen($archivo,'r');
//leemos el archivo
$texto = fread($fp, filesize($archivo));
if(eregi($_GET["q"],$texto)==1)
{
$lugar=strpos($texto,"<p>");
echo $prueba;
echo "<p><a href=$archivo>$archivo</a><br>";
echo substr($texto, $lugar, 200);
}
}
}
}
else
echo "no puede abrirse el directorio o no existe<br>"
?>
</p>
<p>Atte. NeoRod </p>
</body>
</html>
visitame en la web: http://gloriososancarlos.org
<a href="http://gloriososancarlos.org">http://gloriososancarlos.org</a>
Hola a tod@s
tengo un problema
creo que phpMyAdmin no me reconoce el algoritmo Match Against
Hace un par de años inserté un buscador como éste en una web que tenía y funcionaba perfectamente...
Desde hace un tiempo estoy trabajando en otra web e inserté el buscador
pero no me funciona, luego probé en local el buscador de mi web antigua,
qué hace tiempo funcionaba perfectamente, y tampoco funciona.
también ejecuté la consulta sql con el match against, pero phpMyAdmin no encuentra ningún registro y hace la consulta bien...
¿a que se puede deber?
gracias por adelantado
Un saludo
Hola de nuevo,
he encontrado la solución al problema:
insertando “IN BOOLEAN MODE” después de la cadena de búsqueda del AGAINST de la cláusula WHERE. De este modo:
“SELECT distinct id_pelicula, titulo, titulo_original, MATCH (titulo, titulo_original)
AGAINST ( ‘%”.$search.”%’ ) AS Criterio FROM peliculas WHERE
MATCH (titulo, titulo_original) AGAINST ( ‘%”.$search.”%’ IN
BOOLEAN MODE ) ORDER BY Criterio DESC LIMIT 50″
Un saludo
Magnifico articulo, sencillo, rapido y práctico.
No estaría mal que actualizarais con lo de IN BOOLEAN MODE ya que hasta
que no añadi eso a mi sentencia, no conseguí que funcionara
correctamente.
Yo
tenia el mismo problema pero como usaba tablas tipo InnoDB no cree el
index. para solucionarlo use una funcion que cambia los espacios en
blanco (" ") de las palabras de la busqueda y las cambie por "|" (OR
logico en sql) y depues pase eso como parametro y use la funcion REGEXP
de sql:
ejemplo: buscar: hola que tal
despues de cambiarlo queda: hola|que|tal
entonces hago:
select * from tabla where (campo1 regexp "cadena" or campo2 regexp "cadena"...)
cadena lo paso como parametro.
Espero que les sirva :D
Hola,
ayuda por favor, trate de hacer las consultas pero me marca el sig
error: Parse error: parse error in c:archivos de
programaeasyphp1-8wwwcopiapruebacatalogo.php on line 55
mi código es el siguiente espero me puedan ayudar:
<?
$host="localhost";
$user="root";
$password="";
$db="copiaprueba";
$conexion=mysql_connect($host,$user,$password);
$select_db=mysql_select_db($db,$conexion);
include("conecta.php");
$trozos=$_POST['area'];
//DEBO PREPARAR LOS TEXTOS QUE VOY A BUSCAR si la cadena existe
if ($busqueda<>''){
//CUENTA EL NUMERO DE PALABRAS
$trozos=explode(" ",$busqueda);
$numero=count($trozos);
if ($numero==1) {
//SI SOLO HAY UNA PALABRA DE BUSQUEDA SE ESTABLECE UNA INSTRUCION CON LIKE
$cadbusca="SELECT * FROM info2000 WHERE VISIBLE =1 AND area LIKE "%$busqueda%" OR aut LIKE "%$busqueda%" LIMIT 50";
} elseif ($numero>1) {
//SI HAY UNA FRASE SE UTILIZA EL ALGORTIMO DE BUSQUEDA AVANZADO DE MATCH AGAINST
//busqueda de frases con mas de una palabra y un algoritmo especializado
$cadbusca="SELECT id, aut , MATCH ( aut, area ) AGAINST ( "$busqueda" )
AS aa FROM info2000 WHERE MATCH ( aut, area ) AGAINST ( '%"$busqueda"%'
IN
BOOLEAN MODE ) ORDER BY aa";
}
$result=mysql("teleformacion", $cadbusca);
While($row=mysql_fetch_object($result))
{
//Mostramos los titulos de los articulos o lo que deseemos...
$area=$row->AREA;
$autor=$row->AUTOR;
echo $area." - ".$autor."<br>";;
}
?>
<hr size="3" color="808080" width="100%" align="left"> <!-- línea gris-->
<?
echo "<br>";
echo "<br>";
echo "<a href='info.php'>NUEVA CONSULTA</a>"
?>
Hola, soy novato :P
Copié el código de buscar.php que aparece como ejemplo y lo ejecuté en
mi servidor (obviamente con los cambios correspondientes ^^) y me da el
siguiente error "Parse error: syntax error, unexpected $end in E:local
oboty.php on line 21"
busqué que estaba mal, pero no le encuentro nada :S, probé a eliminar
espacios, me fijé en que todas las llaves se cerraran, agregué el cierre
de conexión con MySQL y nada :S, alguién puede ayudarme :P???
Por: Rafael Navas | | 12/2/2009
|
Hola a todos!
Solamente tengo una duda, antes del último while hay una llamada a la
funcio mysql: "$result=mysql("teleformacion", $cadbusca);", esta no la
conozco y no la encuentro por ningún lado mas.
Será un funcion personalizada?
El script me parece muy practico y sencillo.
Felicitaciones Miguel, sigue adelante, para atras ni para agarrar impulso. :)
Saludos
Gracias Por: Franco | | 30/4/2009
|
Gracias despistao, utilize IN BOOLEAN MODE y anda perfecto!!!!
varios errores Por: aka | | 02/6/2009
|
encima
de la linea [$result=mysql("teleformacion", $cadbusca);] falta un [}]
(sin llaves) he copiado todo tal cual para crear el buscador y me da los
siguientes errores:
Notice: Undefined variable: busqueda in C:wampwwwusarticulosuscar.php on line 10
Notice: Undefined variable: cadbusca in C:wampwwwusarticulosuscar.php on line 23
Notice: mysql() [function.mysql]: This function is deprecated; use
mysql_query() instead. in C:wampwwwusarticulosuscar.php on line 23
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL
result resource in C:wampwwwusarticulosuscar.php on line 24
alguna sugerencia?? gracias
Como evitar que busque en enlaces? (por ejemplo) Por: Miquel | | 26/8/2009
|
El código me funciona perfectamente y es rapidísimo.
Lo he codificado para que la palabra o palabras buscadas salgan en color
rojo y en negrita. Pero tengo un problema. Busca dentro del texto de un
campo TEXT de una base de datos MySql. En algunos de esos campos hay
enlaces para que al escribir en pantalla dicho campo aparezcan
fotografias.
Si en ese enlace aparece la palabra que busco encuentra el campo perfectamente, pero me causa dos problemas.
Si esa palabra no aparece también en el texto no la remarca, pero... es que además impide que aparezca la fotografia.
Hay alguna forma de que no busque dentro de los enlaces?
Gracias
por fa ayendenme Por: nestor raul | | 26/8/2009
|
tengo el siguiente codigo pero megenera errores
<table width="100%" border="0" cellspacing="0" cellpadding="0">
Buscar: <input name="palabra">
<input type="submit" name="buscador" value="Buscar">
</form>
<?
if ($_POST['buscador'])
{
// Tomamos el valor ingresado
$buscar = $_POST['palabra'];
// Si está vacío, lo informamos, sino realizamos la búsqueda
if(empty($buscar))
{
echo "No se ha ingresado una cadena a buscar";
}else{
// Conexión a la base de datos y seleccion de registros
$con=mysql_connect("localhost","root","");
$sql = "SELECT * FROM datose WHERE nombre like '%$buscar%' ORDER BY nombre";
mysql_select_db("estudiante", $con);
$result = mysql_query($sql, $con);
// Tomamos el total de los resultados
$total = mysql_num_rows($result);
// Imprimimos los resultados
if ($row = mysql_fetch_array($result)){
echo "Resultados para: <b>$buscar</b>";
do {
?>
<p><b><a href="noticia.php?id=<?=$row['id'];?>"><?=$row['titulo'];?></a></b></p>
<?
} while ($row = mysql_fetch_array($result));
echo "<p>Resultados: $total</p>";
} else {
// En caso de no encontrar resultados
echo "No se encontraron resultados para: <b>$buscar</b>";
}
}
}
?>
Perfeccionar busqueda php y mysql Por: ivan | | 09/12/2009
|
Q
tal amigos no soy experto en esto de los buscadores y est tutorial me
parecio favorable y efectivo pero tengo un problema en la consulta
$cadbusca="SELECT cve_producto,descripcion,precio, MATCH
(cve_producto,descripcion) AGAINST ( '$busqueda' ) AS Score FROM
productos WHERE MATCH(cve_producto,descripcion) AGAINST
('$busqueda') ORDER BY Score DESC LIMIT 50";
se supone que debe buscar y lo hace pero quiero que busque solo la frase
correcta es decir por ejemplo si busco molino grande me deberia sacar
solo estos resultados:
Clave Descripción precio Agregar
1027 molino electrico grande 128.0
267j molino de granos 2023.99
6025 molino electrico chico 578.4
pero me saca esto:
Clave Descripción precio Agregar
1027 molino electrico grande 1280 Carro
7777 podadora grande 8964 Carro
267j molino de granos 2099 Carro
6025 molino electrico chico 1231 Carro
ae789 SOQUET DE PORCELANA REDONDO GRANDE 134 98 Carro
como se dieron cuenta tomo la podadora y el soquet solo por contener la
palabra grande y estoy de acuerdo en la busqueda pero como le hago para
que solo me encuentre en el orden molino ---> grande ---> y que me
omita las otras espero una respuesta de ante mano gracias
Diferencias entre MACH y el LIKE Por: Mariano | | 18/12/2009
|
aca
se plantea que es mejor usar un MACH cuando lo que se busca es una
cadena de caracteres ya que es mas rapido, e echo las pruebas y si es
mas rapido pero no trae los misms resultados aqui va el ejemplo.
Aca estan las dos consultas que en teoria funcionan igual, estan echas
para encontrar la frace "es auto" dentro de la tabla 'tb_imagenes'
SELECT *
FROM tb_imagenes
WHERE MATCH (
`titulo_img` , `descrip_img` , `tag_img`
)
AGAINST (
'es auto'
IN BOOLEAN
MODE
)
SELECT *
FROM tb_imagenes
WHERE
`titulo_img` like '%es auto%' or
`descrip_img` like '%es auto%' or
`tag_img` like '%es auto%'
Bueno si la cadena que tengo en el campo es "mi robot es automatico no manual"
el LIKE encuentra "es auto" y el MACH no encuentra nada.
probe ponerle comodines al mach pero no funciono:
SELECT *
FROM tb_imagenes
WHERE MATCH (
`titulo_img` , `descrip_img` , `tag_img`
)
AGAINST (
'%es auto%'
IN BOOLEAN
MODE
)
Asi que tengo para pensar 2 cosas, la sentensia del mach le falta algo
apra hacerla mas funcional o definitivamente el like tarda mas porque
compara y el mach no
Para que un MACH funcione igual que un LIKE Por: Mariano Ore | | 18/12/2009
|
Para obtener los mismos resultados con un Mach que con un Like debemos tener en cuanta algunos aspectos.
1) con el like usamos el comodin "%" para que traiga lo que contiene y no la frase escata con el mach usamos el asterisco
2) Si queremos que todas las palabras se encuentren en todos los
resultados deberemos utilizar el modo booleano "AGAINST ('es auto' IN
BOOLEAN MODE)", por defecto esta en AGAINST ('es auto' IN NATURAL
LANGUAGE MODE);
3) En 'modo booleano' se pueden aplicar también modificadores, por
ejemplo, si queremos las tuplas con contenido 'texto' y sin 'basura'.
SELECT * FROM tabla WHERE match(campo) against('+texto -basura' in boolean mode);
Les dejo dos ejemplos uno conlike y otro con Mach ambos traen los mismos
resultados pero en cadenas de texto es mas eficiente el MACH
SELECT *
FROM tb_imagenes
WHERE
`titulo_img` like '%es auto%' or
`descrip_img` like '%es auto%' or
`tag_img` like '%es auto%'
-----------------------------------------------------
SELECT *
FROM tb_imagenes
WHERE MATCH (
`titulo_img` , `descrip_img` , `tag_img`
)
AGAINST ('*es auto*'IN BOOLEAN MODE)
Espero les sirva
Duda del buscador Por: CLAUDIA | | 10/1/2010
|
Hola! Estoy siguiendo el ejemplo de tu buscador y me manda el siguiente error:
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL
result resource in C:AppServwwwpruebauscador.php on line 35
Tengo la duda en la línea que dice
$result=mysql("teleformacion", $cadbusca);
La palabra "teleformacion" a que se refiere? es el nombre de mi campo?
Esta es mi línea 34 y el error me lo da en la línea 35, supongo que es
porque no encuentra nada en mi BD, pero ya cambie "teleformacion" por el
nombre de mi campo y aún así sigue el error. Me puedes ayudar por
favor??????
error Por: cephes5 | | 09/3/2010
|
preguntas idiotas, pero por ahi no tanto jeje
bueno a mi me da error en la linea de else "{"
veoque usas ir y else pero en el cofigo figura como elseif (por ahi es asi perocalculoque debe ser solo else)
Hay una llave que no cierra, yo conjeturo que va al final despues de
mostrar los resultados y antes de cerrar el php, pero por mas que
lomodifico no me funciona y cada vez qaue lo pongode manera logica me da
el error "Parse error: parse error, unexpected '{' in
c:foxservwwwunouscar.php on line 23" que es justamene la del else o
elseif, si lo dejo como elseif no me da error, pero tampoco hace nada
niencuentra nada.
Tambien vi que hay en una parte del codigo dos ;; "cho $referencia." -
".$titulo."<br>";; " esto puede ser un error o es asi tambien?
preguntotodo estoporqu eme sigue sinfuncionar a pesar de haberlo revisado bastante
Bueno seguramente hay algo que se me esta pasando pero realmente no lo estoy viendo, agradeceria tu respuesta
muchas gracias
disculpas Por: cephes5 | | 09/3/2010
|
antes
que sea leido mi comentari opido disculpas porla forma que esta
escxrit, pero mi teclado no esta funcionandobien la barra espaciadora y
aveces sale todo junto
gracia buen aporte Por: backboot | | 15/4/2010
|
Amigo gracias por tu aporte me fue muy util..........
Excelente aporte Por: Federico | | 15/4/2010
|
Es
una aporte extraordinariamente util, felicitaciones. Tanto el articulo
como la mayoria de los comentarios han sido de gran utilidad para mi,
que soy novato.
Gracias a todos.
hola me pueden ayudar Por: mil | | 20/4/2010
|
estaba
viendo el ejemplo Programar un buscador con php y mysql y me da error,
por favor me puede ayudar soy novata y tengo que hacer un buscador donde
se teclee la matricula del estudiante y salga su nombre
este es mi codigo:
<html>
<head>
<title>Buscador simple en PHP</title>
</head>
<body>
<form action="buscar.php" method="post">
Buscar: <input name="palabra">
<input type="submit" name="buscador" value="Buscar">
</form>
<?
if ($_POST['buscador'])
{
// Tomamos el valor ingresado
$buscar = $_POST['palabra'];
// Si está vacío, lo informamos, sino realizamos la búsqueda
if(empty($buscar))
{
echo "No se ha ingresado una cadena a buscar";
}else{
// Conexión a la base de datos y seleccion de registros
$con=mysql_connect("localhost","root","");
$sql = "SELECT * FROM co_estudiantes WHERE nombre like '%$buscar%' ORDER BY id DESC";
mysql_select_db("base_de_datos", $con);
$result = mysql_query($sql, $con);
// Tomamos el total de los resultados
$total = mysql_num_rows($result);
// Imprimimos los resultados
if ($row = mysql_fetch_array($result)){
echo "Resultados para: <b>$buscar</b>";
do {
?>
<p><b><a
href="nombre.php?id=<?=$row['id'];?>"><?=$row['apellidos'];?></a></b></p>
<?
} while ($row = mysql_fetch_array($result));
echo "<p>Resultados: $total</p>";
} else {
// En caso de no encontrar resultados
echo "No se encontraron resultados para: <b>$buscar</b>";
}
}
}
?>
</body>
</html>
| Busqueda PHP obteniendo valores de mi MySql
| 28/4/2010 |
Buenos tardes, soy nuevo en esto mejor dicho un novato mas y estoy en aprietos estoy queriendo hacer una busqueda ejem:
__________ ______
Ingrese Codigo:|_________| - es un textbox- y que al momento dar clik
|buscar| en otra pantalla me muestre todos los campos solo de ese codigo
tabla:producto
-codigo
-descripcion
-modelo
-marca
-condicion
-fecha registro
ya tengo varios registros ingresados en mi BD
| quiero editar un registro
| 28/4/2010 |
tabla : empresa
numactivo / nitem / descripcion / modelo / marca / categoria /
ubicacion 123456 / 9.214 /Tornillo /TF 02 /Forte /41
- Herramientas /Plataforma H
cond / obs / fecreg
activo / dar mantenimiento 2010-04-27 05:04:18
Ya hize la busqueda por N°Activo y me muestran los datos con esta programacion
<?php
include ("connect.php");
//conectarse al gestor de la BD
$enlace=mysql_connect('localhost', 'root', 'foot');
//selecionando la BD
mysql_select_db('MIBD', $enlace);
//establecer query
$registro=mysql_query("select * from empresa where numactivo LIKE '%$buscar%'",$enlace);
//selecionando la BD
$fila=@mysql_fetch_array($registro);
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Documento sin título</title>
<style type="text/css">
<!--
body {
background-color: #99FFCC;
}
.Estilo1 {
font-size: 18px;
font-weight: bold;
}
-->
</style></head>
<body>
<form name="form1" method="post" action="">
<p align="center">EMPRESA S.A.</p>
<p align="center" class="Estilo1">FORMULARIO DE EDICION </p>
<p align="left"> </p>
<table width="414" border="2" align="center">
<tr>
<td width="116"><div align="right">N° Activo:</div></td>
<td width="280"><input name="c1" type="text" id="c1"
value ="<? echo $fila[0] ?>" size="8" maxlength="6"></td>
</tr>
<tr>
<td><div align="right">N° Item:</div></td>
<td><input name="c2" type="text" id="c2" value ="<?
echo $fila[1] ?>"size="30" maxlength="30"></td>
</tr>
<tr>
<td><div align="right">Descripción: </div></td>
<td><input name="c3" type="text" id="c3" value ="<?
echo $fila[2] ?>" size="30" maxlength="30"></td>
</tr>
<tr>
<td><div align="right">Modelo:</div></td>
<td><input name="c4" type="text" id="c4" value ="<?
echo $fila[3] ?>" size="20" maxlength="20"></td>
</tr>
<tr>
<td><div align="right">Marca:</div></td>
<td><input name="c52" type="text" id="c52" value ="<?
echo $fila[4] ?>" size="20" maxlength="20"></td>
</tr>
<tr>
<td><div align="right">Categoria:</div></td>
<td><input name="c6" type="text" id="c6" value ="<?
echo $fila[5] ?>" size="20" maxlength="20"></td>
</tr>
<tr>
<td><div align="right">Ubicacion:</div></td>
<td><input name="c53" type="text" id="c53" value ="<?
echo $fila[6] ?>" size="20" maxlength="20"> <a
href="edita.php"></a></td>
</tr>
<tr>
<td><div align="right">Condición:</div></td>
<td><input name="c54" type="text" id="c54" value ="<?
echo $fila[7] ?>" size="20" maxlength="20"></td>
</tr>
<tr>
<td><div align="right">Observaciones:</div></td>
<td><input name="c5" type="text" id="c5" value ="<?
echo $fila[8] ?>" size="30" maxlength="230"></td>
</tr>
</table>
</body>
</html>
//---> lo que quisiera saber es como hago para editar los registros y
que se guarden en mi MD que tengo en MySQL=
http://localhost/phpMyAdmin/
Gracias
guiller... | Correccion que agrega BOOLEAN MODE
| 08/5/2010 |
Para los que tienen error al ejecutar el buscador: el truco está en agregar la frase IN BOOLEAN MODE las dos veces. Queda así:
$result = mysql_query("SELECT chapter_id,page_id,section_id,sections,
MATCH(sections) AGAINST ('$search' IN BOOLEAN MODE) AS score FROM
manual_contents WHERE MATCH (sections) AGAINST ('$search' IN BOOLEAN
MODE) AND language LIKE '$language' ORDER BY score DESC LIMIT 30");
jm2c | DESDE EL PRINCIPIO
| 02/2/2011 |
#1214 - The used table type doesn't support FULLTEXT indexes
ni me dejo intentar el PHP
Zurfy | Grácias
| 10/7/2011 |
Tutorial rapido de seguir si ya tienes conocimientos prévios de Mysql.
Además és fácil i rapido de entender. Muy bien explicado.
Sigue así!
elloco3... | Buenas Por que no me sale
| 29/7/2011 |
Chiscos Como Haria Yo para POner 3 Tablas en ese Buscador las Tablas serian
Loteria
chances
Tiempos
Porfa ayudemen MI email info@sliner.net
Me
parece muy bueno este artículo, pues solamente buscaba con LIKE y
cuando habías búsquedas de más de una palabra no era muy efectivo. Con
este ya he visto grandes resultados. FELICITACIOS y ....... GRACIAS MIL
merlyn3... | ¿Cuál es el código que concluye este ejercicio?
| 08/11/2011 |
Saludos:
Sería bueno mostrar en algún lugar un enlace de descarga de los archivos
necesarios para visualizar el funcionamiento del ejercicio propuesto...
incluyendo paginación.
Agradezco que se haya compartido éste artículo.
Que tengan buen día.