Foros del Web » Programando para Internet » PHP »

Búsqueda

Estas en el tema de Búsqueda en el foro de PHP en Foros del Web. Tal vez este sea de plano, una gran pregunta, pero quisiera saber como por medio de un formulario se crea una consulta, ya sea mediante ...
  #1 (permalink)  
Antiguo 13/11/2002, 15:48
Avatar de lado2mx
Colaborador
 
Fecha de Ingreso: agosto-2001
Ubicación: Veracruz
Mensajes: 3.720
Antigüedad: 16 años, 4 meses
Puntos: 9
Pregunta Búsqueda

Tal vez este sea de plano, una gran pregunta, pero quisiera saber como por medio de un formulario se crea una consulta, ya sea mediante campos generales, y/o conceptuales. Gracias
  #2 (permalink)  
Antiguo 13/11/2002, 15:55
Avatar de chubu  
Fecha de Ingreso: enero-2002
Ubicación: Buenos Aires
Mensajes: 133
Antigüedad: 15 años, 10 meses
Puntos: 0
mmmmmmmm

A que te refieres con campos generales y conceptuales? lo que tu quieres hacer es una búsqueda? en que? en una base de datos?
sin esa información es dificil esbozar una respuesta.
__________________
:pensando:hay algo mal que no anda bien
  #3 (permalink)  
Antiguo 13/11/2002, 16:02
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Te refieres a .. por ejemplo tener unos radio-buttons en el formulario q determinen la forma de presentar esos datos; ASCendente o DEScendente ... y como buscar una frase completa o por palabras? .. algo así?

Si es eso .. a nivel general .. se trataria de fomar un "string" q será la consulta a realizar con las instrucciones SQL pertinentes ...

Un ejemplo .. si necesitamos buscar todas las palabras aparecidas en una frase de busqueda (no solo la frase tal cual) .. podriamos usar la sentencia IN() de Mysql . e "inyectarle" un array con las palabras de la frase .. Para determinar ese array .. podemos hace un split() (PHP) del $string de partida ....

Ves concretando ejemplos de lo que quieres para el buscador y vamos viendo soluciones .. igual si se anima la gente de aquí sacamos algun algoritmo de busqueda generico ...

Un saludo,
  #4 (permalink)  
Antiguo 13/11/2002, 16:09
Avatar de lado2mx
Colaborador
 
Fecha de Ingreso: agosto-2001
Ubicación: Veracruz
Mensajes: 3.720
Antigüedad: 16 años, 4 meses
Puntos: 9
Mas o menos eso que dices cluster

Solo falta concretarlo, por ejemplo:

Quiero hacerlo de manera general (todas la tabla x)

Y tambien de un campo en especifico (Palabra(s) en tabla especifica).

Me imagino que para esto ultimo se puede usar una especie de LIKE. Pero mas Sui generis.

Espero y saquemos mucho provecho de esto, un saludo...

PD... Lo estoy sacando para los sistemas de noticias que tengo en:
  #5 (permalink)  
Antiguo 13/11/2002, 16:23
Avatar de chubu  
Fecha de Ingreso: enero-2002
Ubicación: Buenos Aires
Mensajes: 133
Antigüedad: 15 años, 10 meses
Puntos: 0
Creo que IN() no iria para este caso, no es la manera en la que funciona esa funcion de mysql, ya que no podemos saber si alguna de esas palabras esta en el campo puntual, o sea, IN normalmente se usa

Código:
select ... where id in(1,2,3,4)
pero no podemos hacer algo del estilo

Código:
select ... where cuerpo in('palabra1','palabra2')
porque esto va a comparar el contenido de cuerpo con cada palabra del array por separado, y con la palabra completa.

Lo que si podemos hacer, es armar una consulta un tanto mas extensa, que concatene un LIKE por cada palabra para cada campo a registrar, algo del estilo:

Código:
select ... where campo1 like '%palabra1%' or campo1 like '%palabra2%';
seria un código sencillo de realizar, se hace un split de la cadena de busqueda, y un bucle que recorre el resultado armando el where del select.

saludos

chubu
__________________
:pensando:hay algo mal que no anda bien
  #6 (permalink)  
Antiguo 13/11/2002, 16:33
Avatar de lado2mx
Colaborador
 
Fecha de Ingreso: agosto-2001
Ubicación: Veracruz
Mensajes: 3.720
Antigüedad: 16 años, 4 meses
Puntos: 9
Me diste una idea...

Que tal si hacemos algo como tu dices, pero asi:

Código PHP:
mysql_query=("select ... where titulo like '%palabra1%' "
Este campo1 es para un campo que tenga el titulo de una noticia. Y para algo mas que ya es para un campo de texto llamado contenido seria:

Código PHP:
mysql_query=("select ... where contenido like '%palabra1%' "
O bien:

Código PHP:
mysql_query=("select ... where titulo in('%palabra1%')"
  #7 (permalink)  
Antiguo 13/11/2002, 16:36
Avatar de chubu  
Fecha de Ingreso: enero-2002
Ubicación: Buenos Aires
Mensajes: 133
Antigüedad: 15 años, 10 meses
Puntos: 0
Código:
select ... where contenido like '%palabra1%'
estaría bien, pero

Código:
select ... where titulo in('%palabra1%')
no funcionaria, porque en la funcion IN no podes usar wildcards (el caracter '%' o el caracter '_'), esa funcion compara por cadenas exactamente iguales
__________________
:pensando:hay algo mal que no anda bien
  #8 (permalink)  
Antiguo 13/11/2002, 16:43
Avatar de lado2mx
Colaborador
 
Fecha de Ingreso: agosto-2001
Ubicación: Veracruz
Mensajes: 3.720
Antigüedad: 16 años, 4 meses
Puntos: 9
MMMMMM.......

Ahora que me acuerdo, Like lo uso solo para identificar una frase exacta, puedo hacerla de manera que se adentre a contenido????
  #9 (permalink)  
Antiguo 13/11/2002, 19:34
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Bueno .. a esto es lo q me referia en un punto de mis comentarios .. al tema de generar dinamicamente una serie de instrucciones SQL para obtener el objetivo final ..

En este caso .. buscar palabra(s) en un campo determinado.

Código PHP:
$parametros="php mysql instalacion";

$terms explode(" "$parametros); 
$select 'SELECT * FROM datos WHERE '
for(@
reset($terms); list(, $term) = @each($terms); $select .= 'AND ') { 
$select .= "text LIKE '%$term%' "



/* Se debería generar: 
* SELECT * FROM datos 
* WHERE text LIKE '%php%' AND 
* text LIKE '%mysql%' AND 
* text LIKE '%instalacion%' 
*/ 
$c1mysql_query($select); 
Un saludo,
  #10 (permalink)  
Antiguo 15/11/2002, 09:27
androide
Invitado
 
Mensajes: n/a
Puntos:
Cluster .,...

Algo así podría usar para permitir consultaas a mi BD con operadores logicos ? ...

es que he estado leyendo sobre cadenas de caracteres ... pero hay cosaas que no tengo claras ....

Agradezco tu atencion ....
  #11 (permalink)  
Antiguo 22/11/2002, 16:00
Avatar de lado2mx
Colaborador
 
Fecha de Ingreso: agosto-2001
Ubicación: Veracruz
Mensajes: 3.720
Antigüedad: 16 años, 4 meses
Puntos: 9
Exclamación Foro Rojo

Acabo de estrenar los parametros en http://www.ladodos.com/buscar.php y da el resultado que esta a continuacion: dare mi código para que se den mas referencia:

Código PHP:
<?
 
include ("foro/configuracion.php");
$enlace=mysql_connect($host,$usuario,$password);
mysql_select_db($db);

$parametros="Manu Chao";

$terms explode(" "$parametros); 
$select 'SELECT * FROM nota WHERE '
for(@
reset($terms); list(, $term) = @each($terms); $select .= 'AND ') { 
$select .= "text LIKE '%$term%' "




/* Se debería generar: 
* SELECT * FROM datos 
* WHERE text LIKE '%php%' AND 
* text LIKE '%mysql%' AND 
* text LIKE '%instalacion%' 
*/ 
echo $select;
$c1mysql_query($select);

while(
$res mysql_fetch_row($c1))
{
    echo 
"<a href='http://www.ladodos.com/noticias.ld/notas.php?id=$res[0]' CLASS='nu'><font face='Arial, Helvetica, sans-serif' size='2'>- $res[1]</font></a><br>";
}; 
mysql_close()?>
Les agradecere que me atiendana este problema...
  #12 (permalink)  
Antiguo 23/11/2002, 10:10
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
El error q te dá es porque el algorimo q reliza la concatenacion de esas palabras de la frase a buscar mete un AND de mas al final de toda cadena generada ...

El código ese no es mio y lo puse como orientación .. falta refinar el algoritmo para q o bien quitar el ultimo AND generado o no generarlo ..

Tal vez un bucle "FOR" le va mejor para este caso despues de haber usado un split() por ejemplo para separar las palabras en un array (y contarlas count() ...)

Un saludo,
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 05:02.