pues eso... una direccion donde leer algo para hacer susodicho buscador...., algo sencillito, para buscar de 1 a 3 palabras como mucho, y en 1 solo campo de registro
Cluster me dio una direccion una vez... pero no me la copie... sorry
| ||||
pues aqui hay una liga donde te explican como hacer eso y algunas cosillas mas.. http://otri.us.es/recursosPHP/manual/index.htm |
| |||
Tal vez te dí el URL: www.mysql.com xDDDDD (ahí puedes estudira sobre campos "Full Text" o algo así le llaman ..) Y algo entre PHP y Msyql .. se trata de componer tu sentencia SQL a partir de las palabras que pueda tener tu cadena de busqueda .. Osese .. si tienes: $buscar="bla nose que"; Pues aplicas explode al caracter espacio y tienes las palabras .. Lo recorres con un bucle foreach() por ejemplo (pues lo que te dá el explode es un array) y vas formando tu sentencia SQL del típo: Código PHP: Un saludo,
__________________ Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo. |
| ||||
nada me estoy liando y no puedo he probado con lo que tu dices Custer... pero no llego a mas... y ahora estoy probando esto que encontre... pero me pierdo.. --------------------------------------------------------------------------------<? $query = "SELECT blob,identifier FROM your_table"; $result = mysql_query($query); $number = mysql_numrows($result); $j = 0; WHILE ($j < $number){ /* Your "blob" */ $body = mysql_result($result,$j,"blob"); /*Your "identifier" */ $qid = mysql_result($result,$j,"qid"); /* Open the noise words into an array */ $noise_words = file("noisewords.txt"); $filtered = $body; /* Got to put a space before the first word in the body, so that we can recognize the word later */ $filtered = ereg_replace("^"," ",$filtered); /* Now we suck out all the noisewords, and transform whats left into an array */ /* Brought to you by poor ereg coding! */ for ($i=0; $i<count($noise_words); $i++) { $filterword = trim($noise_words[$i]); $filtered = eregi_replace(" $filterword "," ",$filtered); } $filtered = trim($filtered); $filtered = addslashes($filtered); $querywords = ereg_replace(",","",$filtered); $querywords = ereg_replace(" ",",",$querywords); $querywords = ereg_replace("?","",$querywords); $querywords = ereg_replace("(","",$querywords); $querywords = ereg_replace(")","",$querywords); $querywords = ereg_replace(".","",$querywords); $querywords = ereg_replace(",","','",$querywords); $querywords = ereg_replace("^","'",$querywords); $querywords = ereg_replace("$","'",$querywords); /* We should now have something that looks like 'Word1','Word2','Word3' so lets turn it into an array */ $eachword = explode(",", $querywords); /* and finally lets go through the array, and place each word into the database, along with its identifier */ for ($k=0; $k<count($eachword); $k++){ $inputword = "INSERT INTO search_table VALUES($eachword[$k],$qid)"; mysql_query($inputword); } /* Get the next set of data */ $j++; } ?> solo necesito un formulario con un campo de texto para poner unas palabras y buscar en un registro, nada mas alguien se aclara... |
| |||
Bueno el Fulltext es algo sencillo. La idea es que indexas sobre los campos que vas a buscar. Para ello tienes que modificar tu tabla ALTER TABLE ADD FULLTEXT(CAMPO1,CAMPO2) Ahora bien, ya tienes indexado campo1 y campo2 Fulltext por default te quita las palabras de busqueda con menos o igual a 3 caracteres si no mal recuerdo. Ejemplo $sql="SELECT * FROM TABLA WHERE MATCH(campo1,campo2) AGAINST ('".$_POST["busqueda"]."')"; Y listo, erl FULLTEXT es lo suficientemente inteligente como para ordenar del registro que más coincida al que menos. Otro punto importante es que si mas de los regiustros en tu tabla coinciden no te regresa nada, esto es para que el usuario haga búsquedas mas específicas. =D |
| ||||
miren, ahora estoy usando este codigo, es de php3... tiene algo que ver eso para que no funcione en php4, porque funcionar funciona, no da error, pero no encuentra nada, dice que busqueda no encontrada, vamos que no encuentra regirstros <?php if (!isset($buscar)){ echo "Debe especificar una cadena a bucar"; echo "</html></body> \n"; exit; } $link = mysql_connect("localhost","root","0"); mysql_select_db("shadow_post", $link); $result = mysql_query("SELECT * FROM usuarios WHERE nick LIKE '%$buscar%' ORDER BY nick", $link); if ($row = mysql_fetch_array($result)){ echo "<table border = '1'> \n"; //Mostramos los nombres de las tablas echo "<tr> \n"; while ($field = mysql_fetch_field($result)){ echo "<td>$field->name</td> \n"; } echo "</tr> \n"; do { echo "<tr> \n"; echo "<td>".$row["id"]."</td> \n"; echo "<td>".$row["nombre"]."</td> \n"; echo "<td>".$row["postdate"]."</td> \n"; echo "<td>".$row["postip "]."</td> \n"; echo "<td><a href='mailto:".$row["email"]."'>".$row["email"]."</a></td> \n"; echo "</tr> \n"; } while ($row = mysql_fetch_array($result)); echo "</table> \n"; } else { echo "¡ No se ha encontrado ningún registro !"; } ?> fijense, la 1º vez me dice esto: Debe especificar una cadena a bucar y la 2º vez que hago la busqueda: ¡ No se ha encontrado ningún registro ! ??????????????????? porq? holaaaa hay alguien...? Última edición por nuevo; 08/06/2003 a las 23:05 |
| |||
Si pones el código del formulario que estás usando .. sería lo ideal .. pues ahí hace referencia por ejemplo a : if (!isset($buscar)){ Luego por ahí hace: if ($row = mysql_fetch_array($result)){ Para luego hacer otro while ($row = mysql_fetch_array($result)); ya con el primero .. el puntero de la consulta se habrá movido a la siguiente posición .. y si sólo hay un resultado de tu consulta ($result) .. no va a tener nada el "While()" bucle para recorrer .. Te recomiendo que analices tu código .. ¿como? .. Haciendo "echo" a tus variables que tengas .. y mirando en el manual de PHP oficial que hace cada función .. Las funciones mysql_fetch_xxx() extraen un registro de tu consulta realizada hacia un array, objeto, row .. etc .. dependiendo cual uses y "Mueven" el puntero a la siguiete posición .. Con esa teoría en la "mano" puedes ver lo que te comento .. Eso y otras cosas cómo: if ($row = mysql_fetch_array() ...) así se está asignando a $row lo que pueda resultar de hacer mysql_fetch_array pero si te fijas en la documentación de esa función en PHP.net .. veras que si no puede extraer ningún resultado (registro) de tu consulta .. da FALSE .. por lo tanto se usa como "boolean" (verdadero/falso) para el condicional . .pero, con la particularidad que "mueve" el puntero de la consulta una posición hacia adelante .. pues se está ejecutando mysql_fetch_xxx() .. Ese "if ($row= mysql_fetch_array(...)) .. " Debería ser un mysql_num_rows() para ver si hay o no registros en la consulta realizada: Código PHP: Un saludo,
__________________ Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo. |
| ||||
formulario: ·················································· ·················································· ··· <html> <body> <form method="POST" action="buscador.php"> <strong>Palabra clave:</strong> <input type="text" name="T1" size="20"><br><br> <input type="submit" value="Buscar" name="buscar"> </form> </body> </html> ·················································· ·················································· ··· y el php: <html> <body> <? if (!isset($buscar)){ echo "Debe especificar una cadena a bucar"; echo "</html></body> \n"; exit; } $link = mysql_connect("localhost","root","0"); mysql_select_db("shadow_post", $link); $result = mysql_query("SELECT * FROM usuarios WHERE nick LIKE '%$buscar%' ORDER BY nick", $link); if ($row = mysql_fetch_array($result)){ echo "<table border = '1'> \n"; //Mostramos los nombres de las tablas echo "<tr> \n"; while ($field = mysql_fetch_field($result)){ echo "<td>$field->name</td> \n"; } echo "</tr> \n"; do { echo "<tr> \n"; echo "<td>".$row["id"]."</td> \n"; echo "<td>".$row["nombre"]."</td> \n"; echo "<td>".$row["postdate"]."</td> \n"; echo "<td>".$row["postip "]."</td> \n"; echo "<td><a href='mailto:".$row["email"]."'>".$row["email"]."</a></td> \n"; echo "</tr> \n"; } while ($row = mysql_fetch_array($result)); echo "</table> \n"; } else { echo "¡ No se ha encontrado ningún registro !"; } ?> </body> </html> Última edición por nuevo; 09/06/2003 a las 02:52 |
| |||
Y? .. Tomastes en cuenta las recomendaciones que te hice en el anterior mensaje? Usa preferentemente: if (!isset($_POST['buscar'])){ En lugar de: if (!isset($buscar)){ Un saludo,
__________________ Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo. |
| ||||
nada cluster, se me resiste... hace lo mismo volverse loko Código PHP: 2º ¡ No se ha encontrado ningún registro ! ahhhg Última edición por nuevo; 09/06/2003 a las 23:29 |
| |||
A ver .. de tu formulario .. <strong>Palabra clave:</strong> <input type="text" name="T1" size="20"><br><br> el campo a buscar (variable) es T1 .. y buscar es el nombre del boton "submit" .. Pero eso no implica que tenga valor T1 .. Te das cuenta? ... Código PHP: Código PHP: Un saludo,
__________________ Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo. |