Foros del Web » Programando para Internet » PHP »

problema con buscador simple..... MATCH() AGAINST()

Estas en el tema de problema con buscador simple..... MATCH() AGAINST() en el foro de PHP en Foros del Web. hola familia, tengo un liito aqui con esta buscador, el problema es que no me muestra los resultados de la busqueda, tengo un formulario html ...

  #1 (permalink)  
Antiguo 12/07/2007, 09:29
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 9 meses
Puntos: 638
problema con buscador simple..... MATCH() AGAINST()

hola familia, tengo un liito aqui con esta buscador, el problema es que no me muestra los resultados de la busqueda, tengo un formulario html
Código PHP:
<form name="buscar" action="busqueda_resultado.php" method="get">
    <
strong>Palabra Clave</strong><br />
    <
input type="text" name="key_word" size="10" />
    <
input type="submit" value="Ir" />
</
form
osease, paso la palagra clave por metodo GET y la resivo por URL en la pagina resultado.php
Código PHP:
<?php
$colname_busqueda_resultado 
"-1";
if (isset(
$_GET['key_word'])) {
  
$colname_busqueda_resultado = (get_magic_quotes_gpc()) ? $_GET['key_word'] : addslashes($_GET['key_word']);
}
mysql_select_db($database_regent_cnx$regent_cnx);
$query_busqueda_resultado sprintf("SELECT * FROM documentos WHERE MATCH(asunto, referencia, indicacion) AGAINST ('$key_word')"GetSQLValueString($colname_busqueda_resultado"text"));
$busqueda_resultado mysql_query($query_busqueda_resultado$regent_cnx) or die(mysql_error());
$row_busqueda_resultado mysql_fetch_assoc($busqueda_resultado);
$totalRows_busqueda_resultado mysql_num_rows($busqueda_resultado);
?>
en la tabla donde quiero buscar tengo un indice FULLTEXT en el cual tengo las columnas asunto, referencias, indicacion, pero no me muestra los resultados

por que?
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #2 (permalink)  
Antiguo 12/07/2007, 09:37
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 19 años, 1 mes
Puntos: 33
Re: problema con buscador simple..... MATCH() AGAINST()

Si en vez de usar match() usas like %'cadena'%

Saludillos.
  #3 (permalink)  
Antiguo 12/07/2007, 09:50
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: problema con buscador simple..... MATCH() AGAINST()

Adicionalmente estas segun usando sprintf para formatear el valor pero en ninguna parte de tu cadena tienes el %s que sirve para que sprintf reemplace ese valor, es por eso que no te muestra ningun resultado.

Saludos.
  #4 (permalink)  
Antiguo 12/07/2007, 11:59
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 9 meses
Puntos: 638
Re: problema con buscador simple..... MATCH() AGAINST()

Cita:
Iniciado por GatorV Ver Mensaje
Adicionalmente estas segun usando sprintf para formatear el valor pero en ninguna parte de tu cadena tienes el %s que sirve para que sprintf reemplace ese valor, es por eso que no te muestra ningun resultado.

Saludos.
hola, y como lo hago? yo trabajo con dreamweaver 8, y eso del sprintf lo hace el, y el codigo original es el siguiente:
Código PHP:
 <?php
$colname_busqueda_resultado 
"-1";
if (isset(
$_GET['key_word'])) {
  
$colname_busqueda_resultado = (get_magic_quotes_gpc()) ? $_GET['key_word'] : addslashes($_GET['key_word']);
}
mysql_select_db($database_regent_cnx$regent_cnx);
$query_busqueda_resultado sprintf("SELECT * FROM documentos, WHERE asunto LIKE CONCAT('%%', %s, '%%')"GetSQLValueString($colname_busqueda_resultado"text"));
$busqueda_resultado mysql_query($query_busqueda_resultado$regent_cnx) or die(mysql_error());
$row_busqueda_resultado mysql_fetch_assoc($busqueda_resultado);
$totalRows_busqueda_resultado mysql_num_rows($busqueda_resultado);
?>
y me busca, y lo hace bien, pero yo quiero buscar tambien en los campos referencia e indicacion, por eso es que transforme el codigo, ahora mismo he leido el post y tambien lo del sprinf y por mi vieja que no entiendo nada...............
lo del FULLTEXT y MATCH() AGAINST() lo lei aqui:
http://www.programacion.net/php/articulo/adr_buscador/
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #5 (permalink)  
Antiguo 12/07/2007, 12:12
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: problema con buscador simple..... MATCH() AGAINST()

Código PHP:
$query_busqueda_resultado sprintf("SELECT * FROM documentos WHERE MATCH(asunto, referencia, indicacion) AGAINST ('%s')"GetSQLValueString($colname_busqueda_resultado"text")); 
  #6 (permalink)  
Antiguo 12/07/2007, 13:31
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 9 meses
Puntos: 638
Re: problema con buscador simple..... MATCH() AGAINST()

NO, me da error:
Código:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'rogertm'')' at line 1
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #7 (permalink)  
Antiguo 12/07/2007, 13:49
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 19 años, 1 mes
Puntos: 33
Re: problema con buscador simple..... MATCH() AGAINST()

Si en tu cadena hay comillas simples ( ' ) te recomiendo que uses addslashes()

Saludillos.
  #8 (permalink)  
Antiguo 13/07/2007, 07:55
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 9 meses
Puntos: 638
Re: problema con buscador simple..... MATCH() AGAINST()

Cita:
Iniciado por mauled Ver Mensaje
Si en tu cadena hay comillas simples ( ' ) te recomiendo que uses addslashes()

Saludillos.
hola, bueno, si te refieres a esto?
Código PHP:
$colname_busqueda_resultado "-1";
if (isset(
$_GET['key_word'])) {
  
$colname_busqueda_resultado = (get_magic_quotes_gpc()) ? $_GET['key_word'] : addslashes($_GET['key_word']);

pero, seria mucho pedir algo de codigo? es que si pongo la consulta asi:
Código PHP:
SELECT FROM documentos WHERE MATCH(asuntoreferenciaindicacionAGAINST ('$key_word'
no me da error, pero tampoco muestra resultado alguno y si la pongo asi:
Código PHP:
SELECT FROM documentos WHERE MATCH(asuntoreferenciaindicacionAGAINST ('%s'
dice que no habla:
Código:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'lorem'')' at line 1
mmmmmmmmmmmmm, alguien me da un poco de agua?
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #9 (permalink)  
Antiguo 13/07/2007, 07:57
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: problema con buscador simple..... MATCH() AGAINST()

Prueba asi:
Código PHP:
$query_busqueda_resultado sprintf("SELECT * FROM documentos WHERE MATCH(asunto, referencia, indicacion) AGAINST (%s)"GetSQLValueString($colname_busqueda_resultado"text")); 
  #10 (permalink)  
Antiguo 13/07/2007, 08:56
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 9 meses
Puntos: 638
Re: problema con buscador simple..... MATCH() AGAINST()

sique sin hablar y en cualquier momento pongo aqui el codigo de la pagina completa, a ver si se arregla esto, por que tal vez el problema es a la hora de imprimir los resultados
ahora no de error, pero tampoco muestra nada de nada
/\/\/\/\/\/\/\/\/\/\_______________________________
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #11 (permalink)  
Antiguo 16/07/2007, 15:26
axz
 
Fecha de Ingreso: mayo-2005
Mensajes: 360
Antigüedad: 19 años
Puntos: 10
Re: problema con buscador simple..... MATCH() AGAINST()

hola rogertm ... te seguí desde el foro de (X)HTML ... si vemos tu caso x partes podemos encontrarle nomás no te me desesperes ... primero creo que hay que saber qué tipo de valores esperas pasar por el campo TEXT ... puedes hacer validaciones javascript para evitar el uso de addslashes(), claro si es que no requieres valores como comilla sencilla, doble o barra invertida(', ", \) ... como sea, creo que esto:
Código PHP:
$colname_busqueda_resultado "-1";
if (isset(
$_GET['key_word'])) {
  
$colname_busqueda_resultado = (get_magic_quotes_gpc()) ? $_GET['key_word'] : addslashes($_GET['key_word']);
}
mysql_select_db($database_regent_cnx$regent_cnx);
$query_busqueda_resultado sprintf("SELECT * FROM documentos WHERE MATCH(asunto, referencia, indicacion) AGAINST ('$key_word')"GetSQLValueString($colname_busqueda_resultado"text"));
$busqueda_resultado mysql_query($query_busqueda_resultado$regent_cnx) or die(mysql_error());
$row_busqueda_resultado mysql_fetch_assoc($busqueda_resultado);
$totalRows_busqueda_resultado mysql_num_rows($busqueda_resultado); 
podría quedar así:
Código PHP:
$colname_busqueda_resultado "-1";
if( isset( 
$_GET'key_word' ] ) )
{
  
$colname_busqueda_resultado addslashes$_GET'key_word' ] );
}

mysql_select_db$database_regent_cnx$regent_cnx );
$query_busqueda_resultado 'SELECT *
FROM documentos
WHERE asunto LIKE "%' 
$colname_busqueda_resultado '%"
OR referencia LIKE "%' 
$colname_busqueda_resultado '%"
or indicacion LIKE "%' 
$colname_busqueda_resultado '%"';

#echo $query_busqueda_resultado

$busqueda_resultado mysql_query$query_busqueda_resultado$regent_cnx ) or die( mysql_error() );
$row_busqueda_resultado mysql_fetch_assoc$busqueda_resultado );
$totalRows_busqueda_resultado mysql_num_rows$busqueda_resultado ); 
Sería bueno que probaras descomentando la línea:
#echo $query_busqueda_resultado
para ver qué consulta te genera y probarla directamente en la consola de mysql o en algún GUI que tengas para probar tus consultas con mysql .... y checar si te está aventando los resultados que esperas

Saludos cordiales
  #12 (permalink)  
Antiguo 17/07/2007, 08:17
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 9 meses
Puntos: 638
Re: problema con buscador simple..... MATCH() AGAINST()

AZX, mira, te salvas que estas en Mexico bro, por que si no te entro a besos

gracias man, todo salio bien, justo como queria
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #13 (permalink)  
Antiguo 17/07/2007, 16:06
axz
 
Fecha de Ingreso: mayo-2005
Mensajes: 360
Antigüedad: 19 años
Puntos: 10
Re: problema con buscador simple..... MATCH() AGAINST()

... Excelente rogertm, qué bueno que te sirvió, como te decía no era necesario descartar lo que llevabas, solo era cosa de entender bien el problema y por lo que ví en éste foro lo explicas mejor ...

Fué un plácer ser útil ... mucha suerte por allá
  #14 (permalink)  
Antiguo 18/07/2007, 13:56
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 9 meses
Puntos: 638
Re: problema con buscador simple..... MATCH() AGAINST()

JAJAJJAAAA, hola otra vez.... ahora la cosa sigue pero mas complicada, bueno en la pagina donde tengo el formulario de busqueda, tengo otro form pero mas avanzado, con algunos select y campos de fecha y eso, pero no tengo ningun campo de texto para ingresar palabra clave alguna, y lo que hice fue ponerle un campo oculto para que reconosca el nombre que le paso, bueno creo que no es asi, pero ya no se que hacer, llevo el dia entero en eso, y espero no meterme casi 15 dias como con el otro...............
ok, algo de codigo:
la consulta anterios por fin quedo asi:
Código PHP:
$colname_busqueda_resultado "-1";
if(isset(
$_GET['key_word']))
{
$colname_busqueda_resultado addslashes($_GET['key_word']);
mysql_select_db$database_regent_cnx$regent_cnx );
$query_busqueda_resultado 'SELECT * FROM documentos WHERE asunto LIKE "%' $colname_busqueda_resultado '%" OR referencia LIKE "%' $colname_busqueda_resultado '%" OR indicacion LIKE "%' $colname_busqueda_resultado '%"';
$busqueda_resultado mysql_query$query_busqueda_resultado$regent_cnx ) or die( mysql_error() );
$row_busqueda_resultado mysql_fetch_assoc$busqueda_resultado );
$totalRows_busqueda_resultado mysql_num_rows$busqueda_resultado );} 
y ahora he intentado esto, no me da error pero tampoco muestra nada:
Código PHP:
elseif(isset($_GET['busqueda_avanzada'])){    
mysql_select_db($database_regent_cnx$regent_cnx);
$query_busqueda_resultado 'SELECT documentos.*, carpetas.*, funcionarios.* FROM documentos, carpetas, funcionarios WHERE carpeta LIKE carpeta OR nombre LIKE nombre OR fecha_entrada AND fecha_documento BETWEEN fecha_entrada AND fecha_documento';
$busqueda_resultado mysql_query$query_busqueda_resultado$regent_cnx ) or die( mysql_error() );
$row_busqueda_resultado mysql_fetch_assoc$busqueda_resultado );
$totalRows_busqueda_resultado mysql_num_rows$busqueda_resultado );} 
sera asi? donde esta el error? tengo que poner el campo oculto? (<input type="hidden" name="busqueda_avanzada" />), como le digo a la consulta que formulario es el que estoy mandando????????????

UFFF............, bueno gracias de antemano
saludos
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #15 (permalink)  
Antiguo 18/07/2007, 14:52
axz
 
Fecha de Ingreso: mayo-2005
Mensajes: 360
Antigüedad: 19 años
Puntos: 10
Re: problema con buscador simple..... MATCH() AGAINST()

Pues empezando desde el query ...

Cita:
$query_busqueda_resultado = 'SELECT documentos.*, carpetas.*, funcionarios.*
FROM documentos, carpetas, funcionarios
WHERE carpeta LIKE carpeta
OR nombre LIKE nombre
OR fecha_entrada
AND fecha_documento BETWEEN fecha_entrada AND fecha_documento';
1) No puedes usar un campo y luego * ... y mucho menos puedes escribir varios * ... creo que MySQL, si lo soporta, pero no es estándar ... en tal caso si quieres mostrar todos los campos de todas las tablas incluidas ... basta con un solo *.
2) capeta LIKE carpeta ... es lo mismo que no escribir algo, lo mismo pasa con
nombre LIKE nombre.
3) OR fecha_entrada ... indica los registros que NO tengan algún valor en el campo fecha_entrada.

Creo que lo que quieres es más bien algo como esto:
Código PHP:
$query_busqueda_resultado 'SELECT *
FROM documentos, carpetas, funcionarios
WHERE fecha_documento BETWEEN fecha_entrada AND fecha_documento'

Saludos
  #16 (permalink)  
Antiguo 18/07/2007, 14:57
axz
 
Fecha de Ingreso: mayo-2005
Mensajes: 360
Antigüedad: 19 años
Puntos: 10
Re: problema con buscador simple..... MATCH() AGAINST()

Referente a lo de saber qué formulario mandas ... creo que con esto basta:
Cita:
if(isset($_GET['key_word']))
si es que dicho elemento no existe en ambos formularios ... de lo contrario, puedes usar algún campo hidden con el mismo nombre y en el script donde procesas tu búsqueda hacer algún switch ... algo como:
Código PHP:
$hdnCualForm $_POST'hdnCualForm' ]; //ó $_GET[ 'hdnCualForm' ]
switch( $hdnCualForm )
{
  case 
'form_1':
    
//procesar form 1
  
break;
  case 
'form_2':
    
//procesar form 2
  
break;
  ...

Espero haber sido claro ... saludos
  #17 (permalink)  
Antiguo 18/07/2007, 21:02
Avatar de marcus aurelio  
Fecha de Ingreso: julio-2007
Ubicación: Quilmes, Bs. As.
Mensajes: 7
Antigüedad: 16 años, 9 meses
Puntos: 1
Re: problema con buscador simple..... MATCH() AGAINST()

buenas como estan..... yo hace poco tuve un problema parecido con consultas para buscador.... y me econtre que con la consulta que vos estas haciendo.... o sea usando like vas a tener problemas cuando en la busqueda ingreses mas de una palabra.... es decir el espacio trunca la cadena y esa consulta puede arrojar resultados no esperado yo lo que te recmiendo es hacer algo como lo siguiente

Código PHP:
<?php
//construimos un array con los campos de la una tabla, en los que querramos que se haga la busqueda
//supongamos que nustra tabla se va a llamar busqueda
$campo=array('juan','marcos''pedro''adolfo');
//empezamos la construccion de la variable sql y le asignamos una cadena que sera la primera parte de //nuestra consulta sql o sea la clausula WHERE y un parentesis que nos servira para agrupar los //parametros de busqueda o sea el primer parentesis de de la construccion
//hasta ahora nuetra sql seria la siguiente WHERE (   ...... ok??
$sql=' WHERE (';

//ahora lo que haremos sera un bucle para recorrer todo el array $campo y leemos los campos deseados
for($x $x count($campo); $x++){
//aca lo que hacemos, suponiendo que la variable a buscar provenga de un formulario y se llame clave, //es separar, mediante la funcion explode, y valiendonos del caracter que separar las palabras en //este caso es un espacio en blanco representado por ' ' y poner todas las palabras dentrode un array //llamado $pa y luego por medio de la funcion count, contar la cantidad de cadenas que contenga ese //array
count($pa=explode(' ',$_POST['clave']));
//luego generamos un bucle que recorra el array $pa
for($i 0$i count($pa); $i++ ){
//aca seguimos contruyendo la variable $sql, y le agregamos los campos de acuerdo la posicion $x //(declarado en el primer bucle for) luego ponemos la clausula  LIKE y la palabra que buscamos de //acuerdo a la posicion que ocupa dentro del array $pa, lo que hasta ahora construimos es algo como //esto....WHERE ($campo1 LIKE '%clave1%'..... y la multiplicacion del bucle, //ok?
$sql.=$campo[$x].' LIKE '.'\'%'.$pa[$i].'%\' ';
//aqui declaramos un condicional if para pedir que cuando el valor de $i sea menor al total de cadenas
//que contiene el array $pa menos 1 nos agregue a nuestra construccion $sql 'OR', que quiere decir //esto?? que cuando halla mas de una cadena en $pa nos imprimira  OR, pero al final no imprimira nada //osea que el $sql queda asi.....
//WHERE ($campo1 LIKE '%clave1%' OR.... y lo que sigue gracias al bucle
if($i count($pa)-1) {
$sql .= " OR ";
}

}
//aca lo mismo que en el if anterior pero para el array $campo
if($x count($campo)-1) {
//igual que el otro or pero este imprimira dos parentesis que son los que agruparan nuestra sql, no //dessesperen ya ira tomando forma...... ahora nos qeuda asi....WHERE ($campo1 LIKE '%clave1%' OR 
//$campo2 LIKE '%clave2%') OR (
$sql .= ") OR (";
}
//agregamos el ultimo parentesis, el que cierra aquello que abrims junto con la clausula WHERE
$fin=')';
}
        
//aca metemos todo lo que construimos en la variable $sql, en la variable que representara nuetra //consulta


$query "SELECT * FROM facturas $sql $fin";
//ahora si buscamos por una sola clave la construccion sera algo asi
/*SELECT * FROM facturas WHERE (juan LIKE '%clave1%' ) OR (marcos LIKE '%clave1%' ) OR (pedro LIKE '%clave1%' ) OR (adolfo LIKE '%clave1%' )*/
//y si ponemos dos
/*SELECT * FROM facturas WHERE (juan LIKE '%clave1%' OR juan LIKE '%clave2%' ) OR (marcos LIKE '%clave1%' OR marcos LIKE '%clave2%' ) OR (pedro LIKE '%clave1%' OR pedro LIKE '%clave2%' ) OR (adolfo LIKE '%clave1%' OR adolfo LIKE '%clave2%' )*/
//si quieren para comprobar que todo ande bien anulen el codigo de coneccion a base de datos, //comentandolo, e impriman la sql para ver que realmente imprime loque queremos
 
echo $query;
?>
la consulta con match agains es mejor ya que da puntaje de conicidencia a los resultados ylos ordena de acuerdo a eso.... pero es mucho mas complejo.... mas adelante publicare algo sobre eso....

espero les halla servido.... todo esto

Última edición por marcus aurelio; 18/07/2007 a las 21:05 Razón: mostrar el codigo coloreado
  #18 (permalink)  
Antiguo 19/07/2007, 10:06
axz
 
Fecha de Ingreso: mayo-2005
Mensajes: 360
Antigüedad: 19 años
Puntos: 10
Re: problema con buscador simple..... MATCH() AGAINST()

marcus aurelio,
Antes que todo bienvenido al foro!

Lo que comentas se vé interesante, solo un pequeño detalle ... eso de las búsquedas es muy complejo y de preferencia hay que definir el estilo que querremos desde el principio, por ejemplo (es crítica constructiva, créeme) en el caso del buscador que planteas ... qué pasa si quiero buscar la frase "estoy feliz" ... me traería las coincidencias con estoy y con feliz, pero no necesariamente las coincidencias en las que estén ambas palabras y en ése órden ...

Aunque creo que encaja perfecto en lo que rogertm quiere lograr.

Un saludo e insisto, es crítica constructiva, espero lo tomes así, y nuevamente Bienvenido!
  #19 (permalink)  
Antiguo 20/07/2007, 13:23
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 9 meses
Puntos: 638
Re: problema con buscador simple..... MATCH() AGAINST()

hola de nuevo, bueno a ver, si me di cuenta que tenia mal la consulta, ahora tengo algo como esto, pero no muestra nada de resultados, a ver si me pueden seguir ayudando.......................
Código PHP:
<?php
$colname_busqueda_resultado 
"-1";
if(isset(
$_GET['key_word']))
{
$colname_busqueda_resultado addslashes($_GET['key_word']);
mysql_select_db$database_regent_cnx$regent_cnx );
$query_busqueda_resultado 'SELECT * FROM documentos WHERE asunto LIKE "%' $colname_busqueda_resultado '%" OR referencia LIKE "%' $colname_busqueda_resultado '%" OR indicacion LIKE "%' $colname_busqueda_resultado '%"';
//echo $query_busqueda_resultado;
$busqueda_resultado mysql_query$query_busqueda_resultado$regent_cnx ) or die( mysql_error() );
$row_busqueda_resultado mysql_fetch_assoc$busqueda_resultado );
$totalRows_busqueda_resultado mysql_num_rows$busqueda_resultado );}

elseif(isset(
$_GET['avanzada']))
{
$colname_busqueda_resultado addslashes($_GET['avanzada']);
mysql_select_db($database_regent_cnx$regent_cnx);
$query_busqueda_resultado 'SELECT * FROM documentos WHERE carpeta_ID LIKE "%'.carpeta.'%" AND funcionario_ID LIKE "%'.funcionarios.'%" AND fecha_entrada LIKE "%'.fecha_entrada.'%" AND fecha_documento LIKE "%'.fecha_documento.'%"';
$busqueda_resultado mysql_query$query_busqueda_resultado$regent_cnx ) or die( mysql_error() );
$row_busqueda_resultado mysql_fetch_assoc$busqueda_resultado );
$totalRows_busqueda_resultado mysql_num_rows$busqueda_resultado );}
?>
es eso lo que debo hacer? esta bien asi o tiene algun problema?

otra cosa, no entendi lo del switch, es que debo hacer los casos con key_word y avanzada y entonces ejecutar la consulta que convenga?

bueno, hasta ahora eso, pa poder ir por partes, despues sigo con lo demas

saludos y gracias mil de antemano
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #20 (permalink)  
Antiguo 20/07/2007, 13:36
axz
 
Fecha de Ingreso: mayo-2005
Mensajes: 360
Antigüedad: 19 años
Puntos: 10
Re: problema con buscador simple..... MATCH() AGAINST()

rogertm tus consultas se ven bien ... entonces, como recomendación.

Después de construír tu consulta imprímela en pantalla:
Código PHP:
echo $query_busqueda_resultado
y la que te muestre en el navegador ... es posible que tengas algunos datos incorrectos, o incoherentes ... por ejemplo que a columnas con datos numéricos les estés pasando cadenas o cosas por el estilo ...

Un saludo
  #21 (permalink)  
Antiguo 21/07/2007, 06:55
Avatar de marcus aurelio  
Fecha de Ingreso: julio-2007
Ubicación: Quilmes, Bs. As.
Mensajes: 7
Antigüedad: 16 años, 9 meses
Puntos: 1
Re: problema con buscador simple..... MATCH() AGAINST()

hola gente... y gracias por la bienvenida axz.... en primer lugar gracias por la critica.... de no ser por ellas... estos foros no tendrian sentido...... en segundo estoy completamente de acuerdo con vos.... en que ese ejemplo de buscador no es lo mejor.... ya que no analiza frases si no palabras sueltas y como vos decis... si buscas la frase "soy feliz" te va a traer resultados de soy y de feliz... pero tene en cuenta que mi recomendacion de hacer este consulta fue en contra de usar la que estaba usando rogertm, es decir algo como esto.

SELECT * FROM basededatos WHERE campo1 LIKE '%clave%' OR campo2 LIKE '%clave%'

ya que esa consulta no te traera resultados para una clave ingresada como por ejemplo "soy feliz" si no estubiera presentre la cadena exacta "soy feliz" y por ejemplo si estubiera "estoy feliz" seria bueno que te muestre algo ya que seria si milar a lo que buscamos, por lo tanto para un buscador interno y simple considero que es mejor hacer esa consulta que la que estaba usando rogertm . obviamante que lo de match against es muchisimo mejor... ya que esta analiza frases y conicidencis y da puntajes a estas coincidencias....pero bueno hacer untutorialito para eso me va a llevar un poco de tiempo, mas que nada por las capturas de imagen del phpmyadmin....

rogertm.... si no te tira resultados ¿puede ser por que estes poniendo mas de una palabra en el campo de busqueda?.... por otra parte para este tipo de cosas... despegate un poco de dreamweaver.... ojo..... no soy anti dreamwever al contrario.... pero para algunas cosas es necesario escribir nuestro pripio codigo.... ya que dreamweaver tiene algunas limitaciones..... y si pensas hacerlo con match against.... tendras que despegarte aun mas....

bueno gente saludos a todos..... y gracias por la recepcion....
  #22 (permalink)  
Antiguo 21/07/2007, 11:39
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 9 meses
Puntos: 638
Re: problema con buscador simple..... MATCH() AGAINST()

hola otra vez, bueno, al imprimir la consulta me muestra esto cuando envio el formulario simple (key_word):
Código:
SELECT * FROM documentos WHERE asunto LIKE "%rogertm%" OR referencia LIKE "%rogertm%" OR indicacion LIKE "%rogertm%"
muy bien, tambien imprime los resultados de la busqueda, ahora, el segundo formulario (avanzada) muestra esto
Código:
SELECT * FROM documentos WHERE carpeta_ID LIKE "%carpeta%" AND funcionario_ID LIKE "%funcionarios%" AND fecha_entrada LIKE "%fecha_entrada%" AND fecha_documento LIKE "%fecha_documento%"
evidentemente no me esta pasando los parametros, aqui pongo el formulario completo a ver donde esta el error, o que le falta o que le sobra:
Código PHP:
<form name="busqueda_avanzada" action="busqueda_resultado.php" method="get">
    <input type="hidden" name="avanzada" />
    <h3>B&uacute;squeda Avanzada</h3>
    <strong>Carpeta:</strong><br />
    <select name="carpeta">
        <option value="">-------------</option>
        <?php do { ?>
        <option value="<?php echo $row_mostrar_carpetas['carpeta_ID']; ?>"><?php echo $row_mostrar_carpetas['carpeta']; ?></option>
        <?php } while ($row_mostrar_carpetas mysql_fetch_assoc($mostrar_carpetas)); ?>
    </select><p>
    <strong>Funcionarios</strong>
    <select name="funcionarios">
        <option value="">-------------</option>
        <?php do { ?>
        <option value="<?php echo $row_mostrar_funcionarios['funcionario_ID']; ?>"><?php echo $row_mostrar_funcionarios['nombre']; ?></option>
        <?php } while ($row_mostrar_funcionarios mysql_fetch_assoc($mostrar_funcionarios)); ?>
    </select><p>
    <strong>Fecha de Entrada</strong>
    <input type="text" name="fecha_entrada" size="15" /><input type=button value="select" onclick="displayDatePicker('fecha_entrada', false, 'ymd', '.');"><p>
    <strong>Fecha del Documento</strong>
    <input type="text" name="fecha_doc" size="15" /><input type=button value="select" onclick="displayDatePicker('fecha_doc', false, 'ymd', '.');"><p>
    <input type="submit" value="buscar" />
</form>
bueno gracias, espero seguir recibiendo la ayuda de ustedesssssssssSs
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #23 (permalink)  
Antiguo 23/07/2007, 08:50
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 9 meses
Puntos: 638
Re: problema con buscador simple..... MATCH() AGAINST()

Cita:
Iniciado por marcus aurelio Ver Mensaje
rogertm.... si no te tira resultados ¿puede ser por que estes poniendo mas de una palabra en el campo de busqueda?.... por otra parte para este tipo de cosas... despegate un poco de dreamweaver.... ojo..... no soy anti dreamwever al contrario.... pero para algunas cosas es necesario escribir nuestro pripio codigo.... ya que dreamweaver tiene algunas limitaciones..... y si pensas hacerlo con match against.... tendras que despegarte aun mas....

bueno gente saludos a todos..... y gracias por la recepcion....
bueno, eso es otro tema

gracias tambien a todos
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #24 (permalink)  
Antiguo 23/07/2007, 10:53
axz
 
Fecha de Ingreso: mayo-2005
Mensajes: 360
Antigüedad: 19 años
Puntos: 10
Re: problema con buscador simple..... MATCH() AGAINST()

rogertm, relellendo tus posts ... noté esto:
Cita:
$query_busqueda_resultado = 'SELECT * FROM documentos WHERE carpeta_ID LIKE "%'.carpeta.'%" AND funcionario_ID LIKE "%'.funcionarios.'%" AND fecha_entrada LIKE "%'.fecha_entrada.'%" AND fecha_documento LIKE "%'.fecha_documento.'%"';
hay un error en tu recepción de variables, pues tienes tus variables sin $ ... héchale un ojo ... y cuidado con eso ... la corrección quedaría así:
Código PHP:
$query_busqueda_resultado 'SELECT *
FROM documentos
WHERE carpeta_ID LIKE "%' 
$_GET'carpeta' ] . '%"
AND funcionario_ID LIKE "%' 
$_GET'funcionarios' ] . '%"
AND fecha_entrada LIKE "%' 
$_GET'fecha_entrada' ] . '%"
AND fecha_documento LIKE "%' 
$_GET'fecha_doc' ] .'%"'
OJO que incluso en el like del campo fecha_documento la intentas cachar como fecha_documento en lugar de $_GET[ 'fecha_documento' ] ...

Suerte con tu programa
  #25 (permalink)  
Antiguo 23/07/2007, 10:57
axz
 
Fecha de Ingreso: mayo-2005
Mensajes: 360
Antigüedad: 19 años
Puntos: 10
Re: problema con buscador simple..... MATCH() AGAINST()

marcus aurelio,
Cita:
Iniciado por marcus aurelio Ver Mensaje
... ese ejemplo de buscador no es lo mejor.... ya que no analiza frases si no palabras sueltas ...
Yo no diría que no es de lo mejor por el contrario, creo que para lo que rogertm está buscando lograr, sirve perfecto ...

Un saludo
  #26 (permalink)  
Antiguo 23/07/2007, 12:48
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 9 meses
Puntos: 638
Re: problema con buscador simple..... MATCH() AGAINST()

WOAWWWWWWWW.........1
si, todo bien ahora, PERO, agradeceria, para terminar con este tema, al menos por ahora, (ya despues analizo lo que dice marcus aurelio), que me ayudaran a ver este ultimo problemita que tengo, y no es un problema en si, es que ya ni veo por donde poner o quitar codigo;

en donde muestro los datos de la busqueda tengo esto:
Código PHP:
<?php
if (empty($_GET['key_word'])){
    echo 
"<h4>Debe introducir una palabra clave</h4>";}
elseif(
$totalRows_busqueda_resultado >= 1)
 {echo 
"Su busqueda por palabra clave arrojo <strong>$totalRows_busqueda_resultado</strong> resultados para <strong>$palabra</strong> en <strong>" $reloj->stop(true3) ."</strong> segundos" ;
?>

<table>
    // aqui toda la tabla donde tengo la armazon de la muestra de los resultados y bla, bla, bla.........
</table>

<?php
}
elseif(
$totalRows_busqueda_resultado == 0)
    {echo 
"su busqueda arrojo <strong>$totalRows_busqueda_resultado</strong> resultados para <strong>$palabra</strong>";}
?>
el problema es que no acabo de ver por donde es que tengo que poner la condicion para que me muestre o no donde dice <h4>Debe introducir una palabra clave</h4>, es decir, si el form que paso es el de avanzada, no puede mostrar el cartel de introducir palabraq clave y viceversa, me explico?

bueno, gracias y............., gracias, que mas puedo decir..................!
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose

Última edición por rogertm; 23/07/2007 a las 12:55
  #27 (permalink)  
Antiguo 23/07/2007, 17:20
axz
 
Fecha de Ingreso: mayo-2005
Mensajes: 360
Antigüedad: 19 años
Puntos: 10
Re: problema con buscador simple..... MATCH() AGAINST()

Según entiendo, tienes 2 forms en un script pero ambos los procesas en la misma página, es decir, la propiedad action en ambos formularios es la misma url ... por lo tanto estas buscando una forma de identificar si viene de un formulario (key_word) o del otro (búsqueda avanzada) ...

Según estoy entiendo tu código, puedes hacer algo como esto:
Código PHP:
#se usó el form de la palabra clave
if( isset( $_GET'key_word' ] ) )
{
  if( empty( 
$_GET'key_word' ] ) )
  {
     echo 
"<h4>Debe introducir una palabra clave</h4>";
  }
  else
  {
    if( 
$totalRows_busqueda_resultado )
    {
       
#la búsqueda no arrojó resultados ... acá el código que tienes en: 
       # elseif($totalRows_busqueda_resultado == 0)
    
}
    else
    {
       
#la búsqueda arrojó resultados ... acá el código que tienes en:
       # elseif($totalRows_busqueda_resultado >= 1)
    
}
  }
}
else
{
   
#código para procesar tu búsqueda avanzada

No sé si eso responda tu pregunta rogertm
  #28 (permalink)  
Antiguo 24/07/2007, 00:19
Avatar de _ssx  
Fecha de Ingreso: mayo-2003
Ubicación: mX
Mensajes: 683
Antigüedad: 21 años
Puntos: 60
Re: problema con buscador simple..... MATCH() AGAINST()

Creo que si en verdad quieres aprender, te despegues un poco de las busquedas con %like%..a la larga veras que hay un gran abismo entre hacer busquedas por palabra.. que hacer busquedas por frases y su relevancia.. como lo harian Match() y AGAINST()

imaginate si google nos trajera TODOS los resultados de cada una de las palabras que buscamos y no tuviera alguna logica en el Analisis sintactico de las Querys
__________________
Escribe tu código de forma que refleje, y saque a relucir,lo mejor de tu carácter personal
www.oscararzola.com/blog
Principios de un programador
  #29 (permalink)  
Antiguo 24/07/2007, 07:23
Avatar de marcus aurelio  
Fecha de Ingreso: julio-2007
Ubicación: Quilmes, Bs. As.
Mensajes: 7
Antigüedad: 16 años, 9 meses
Puntos: 1
Re: problema con buscador simple..... MATCH() AGAINST()

hola _ssx, es verdad lo que vos decis.

Cita:
Iniciado por _ssx Ver Mensaje
Creo que si en verdad quieres aprender, te despegues un poco de las busquedas con %like%..a la larga veras que hay un gran abismo entre hacer busquedas por palabra.. que hacer busquedas por frases y su relevancia.. como lo harian Match() y AGAINST()

imaginate si google nos trajera TODOS los resultados de cada una de las palabras que buscamos y no tuviera alguna logica en el Analisis sintactico de las Querys
por eso en algun post dije que no era la mejor opcion, pero note que a lo que se estaba buscando en este post... de acuerdo a las consultas que se venian haciendo podria ser de ayuda.... y para salir del problema hasta que se pueda trabajar con match against.
ademas bueno lamentablemente ninguno de nosotros es google.... ni tampoco tenemois una base de datos tan extensa como para tener problemas con este tipo de consultas....

de todas formas.... tampoco creo que match against, sea lo mejor... ya que si tenes algo de contenido estatico en tu pagina... tampoco sera leido por el buscador... creo que lo mejor es combinar antre match against y apertura y lectura de archivos (donde se puedan leer los tags y los contenidos estaticos).... algo en lo que ya estoy trabajando y ni bien lo tenga lo voy a postear todo junto... desde consultas simples con like... pasando por match against y la lectura de estaticos... saludos
  #30 (permalink)  
Antiguo 24/07/2007, 08:53
Avatar de _ssx  
Fecha de Ingreso: mayo-2003
Ubicación: mX
Mensajes: 683
Antigüedad: 21 años
Puntos: 60
Re: problema con buscador simple..... MATCH() AGAINST()

Cita:
Iniciado por marcus aurelio Ver Mensaje
algo en lo que ya estoy trabajando y ni bien lo tenga lo voy a postear todo junto... desde consultas simples con like... pasando por match against y la lectura de estaticos... saludos

Se escucha muy bien.. lo esperaremos con ansias , y si tienes razón con respecto a lo de "la mejor opción" es como en el caso de los ordenamientos.. a veces en el caso mas sencillo no es util ni eficaz usar el ordenamiento más eficiente.. ya que puede salir contraproducente.. y elevar el tiempo de respuesta o la complejidad del algoritmo.

Ok.. revisando bien, a veces like a veces Match().. a veces las dos
__________________
Escribe tu código de forma que refleje, y saque a relucir,lo mejor de tu carácter personal
www.oscararzola.com/blog
Principios de un programador
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 04:19.