Foros del Web » Programando para Internet » ASP Clásico »

Separar palabras para buscador

Estas en el tema de Separar palabras para buscador en el foro de ASP Clásico en Foros del Web. Hola amigos, lo que quiero es que mi buscador de mensajes en el foro busque por palabra, no por frase. En php tenía algo hecho: ...
  #1 (permalink)  
Antiguo 29/12/2002, 14:15
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 23 años, 2 meses
Puntos: 29
Separar palabras para buscador

Hola amigos, lo que quiero es que mi buscador de mensajes en el foro busque por palabra, no por frase. En php tenía algo hecho:

$palabrasBusqueda = explode(" ",$clave);

[...otro código...]
$i = 1;
while($palabrasBusqueda[$i] != "")
{
$sql .= " OR mensaje LIKE '%".$palabrasBusqueda[$i]."%' OR titulo LIKE '%".$palabrasBusqueda[$i]."%'";
$i++;
}

Existe algo así como explode que convierta la cadena en un array? Podría hacerlo fácilmente con split()?

Gracias.
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #2 (permalink)  
Antiguo 29/12/2002, 14:26
Avatar de korev  
Fecha de Ingreso: diciembre-2002
Ubicación: Barcelona
Mensajes: 127
Antigüedad: 22 años, 4 meses
Puntos: 0
Pues sí, es con split. Consulta la documentación al respecto.
__________________
on error... resume next
  #3 (permalink)  
Antiguo 29/12/2002, 14:32
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 23 años, 2 meses
Puntos: 29
Tengo un problema, tengo el siguiente código:

palabra=replace(request.form("palabra")," de ","")
palabra=replace(palabra," a ","")
palabra=replace(palabra," en ","")
palabra=replace(palabra," para ","")
palabrab=split(palabra," ")
sql="Select * From mensajes Where "&request.form("donde")&" LIKE '%"&palabrab(0)&"%'"

pero lo destacado con negrita sería la primera palabra, cómo hago para contar todas las palabras de la cadena y que busque por cada una de las palabras?
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.

Última edición por CHuLoSoY; 29/12/2002 a las 14:59
  #4 (permalink)  
Antiguo 29/12/2002, 15:02
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 23 años, 2 meses
Puntos: 29
por cierto, no sé si está bien el código que hice, alguien me puede decir si está bien? Es decir, si funcionaría aunque sólo fuese con la primera palabra.
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #5 (permalink)  
Antiguo 29/12/2002, 17:11
Avatar de korev  
Fecha de Ingreso: diciembre-2002
Ubicación: Barcelona
Mensajes: 127
Antigüedad: 22 años, 4 meses
Puntos: 0
Debería funcionar tal y como lo tienes para la primera palabra, pero no creo que sea la mejor forma.
Cuando metes el request.form("donde") en la sql, asumo que el nombre del campo es el nombre del combo, radio o lo que sea. En ese caso el nombre del campo está a la vista de todos. Este tipo de cosas no son prudentes

Con eso de palabra y palabrab me perdí. No veo porqué incluyes 'palabra' en el fragmento de código si aparentemente ahí no cumple ninguna función.
Bueno, pasando de palabra y palabrab te pongo lo que preguntas:

Código:
dde=request.form("donde")

sql="Select * From mensajes Where "

for i=0 to ubound(palabrab)
  if i<>0 then
    sql=sql & " AND "
  end if
  sql=sql & dde & " LIKE '%" & palabrab(i) & "%'"
next
Acuérdate de modificar lo que tienes como nombre de campo en el html del form, o estamos en las mismas.

__________________
on error... resume next

Última edición por korev; 29/12/2002 a las 17:20
  #6 (permalink)  
Antiguo 29/12/2002, 17:33
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 23 años, 2 meses
Puntos: 29
Muchas gracias, pero esto no lo entendí:

Acuérdate de modificar lo que tienes como nombre de campo en el html del form, o estamos en las mismas.

qué quieres decir con eso?
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.

Última edición por CHuLoSoY; 29/12/2002 a las 17:45
  #7 (permalink)  
Antiguo 29/12/2002, 17:44
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 23 años, 2 meses
Puntos: 29
me da este error:

Microsoft JET Database Engine error '80040e14'

Syntax error (missing operator) in query expression 'AND AND mensaje LIKE '%todo%''.

/foro/buscarok.asp, line 109

Lo da en la última palabra y se juntan dos ANDs.

´Saludos.
por cierto que si pongo una sóla palabra funciona.
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.

Última edición por CHuLoSoY; 29/12/2002 a las 21:12
  #8 (permalink)  
Antiguo 29/12/2002, 21:19
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 23 años, 2 meses
Puntos: 29
alguien me puede decir en donde está el error y cómo corregirlo?
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #9 (permalink)  
Antiguo 29/12/2002, 21:37
Avatar de korev  
Fecha de Ingreso: diciembre-2002
Ubicación: Barcelona
Mensajes: 127
Antigüedad: 22 años, 4 meses
Puntos: 0
Cita:

Cuando metes el request.form("donde") en la sql, asumo que el nombre del campo es el nombre del combo, radio o lo que sea. En ese caso el nombre del campo está a la vista de todos. Este tipo de cosas no son prudentes

(...)

Acuérdate de modificar lo que tienes como nombre de campo en el html del form, o estamos en las mismas.
Quise decir que no pongas el nombre del campo en el código html, ya sea en los combos, hidden, name, o lo que sea que se te ocurra.

-

Acabo de probar el código en mi pc con datos fijos...

Código:
'dde=request.form("donde")

dde="dde"

palabrab=array("A","B","C","D","E","F")

sql="Select * From mensajes Where "

for i=0 to ubound(palabrab)
  if i<>0 then
    sql=sql & " AND "
  end if
  sql=sql & dde & " LIKE '%" & palabrab(i) & "%'"
next

Response.Write(sql)

... y la sql que me devuelve es ésta...


Código:
Select * From mensajes 
Where dde LIKE '%A%' 
AND dde LIKE '%B%' 
AND dde LIKE '%C%' 
AND dde LIKE '%D%' 
AND dde LIKE '%E%' 
AND dde LIKE '%F%'
... algo habrás tocado
__________________
on error... resume next
  #10 (permalink)  
Antiguo 30/12/2002, 10:51
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 23 años, 2 meses
Puntos: 29
Yo tengo lo siguiente:

Código:
palabra=replace(request.form("palabra")," de "," ")
palabra=replace(palabra," a "," ")
palabra=replace(palabra," en "," ")
palabra=replace(palabra," para "," ")
palabrab=split(palabra," ")

dde=request.form("donde")

sql="Select * From mensajes Where "

for i=0 to ubound(palabrab)
  if i<>0 then
    sql=sql & " AND "
  end if
  sql=sql & dde & " LIKE '%" & palabrab(i) & "%'"
next
O eso creo, por k no estoy en mi ordenador, pero te aseguro que simplemente añadí el código que me diste con los replace que tenía.
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #11 (permalink)  
Antiguo 30/12/2002, 10:59
Avatar de bakanzipp  
Fecha de Ingreso: noviembre-2001
Ubicación: santiago de shilli
Mensajes: 2.554
Antigüedad: 23 años, 5 meses
Puntos: 0
hazle un response.write a la ultima palabra para mi que viene vacia...

a veces el split te deja un indice mas en vacio...

si es eso descuentale al ubound - 1 y verifica el resultado.
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 16:40.