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

Optimizar una consulta sql

Estas en el tema de Optimizar una consulta sql en el foro de ASP Clásico en Foros del Web. Estimados, tengo la siguiente estructura de BDD Tabla kb_biblioteca id_archivo Autonumerico titulo Texto archivo Texto tabla Kb_keywords id autonumerico id_archivo int keyword por ejemplo si ...
  #1 (permalink)  
Antiguo 06/09/2005, 12:35
 
Fecha de Ingreso: marzo-2003
Ubicación: onde toy?
Mensajes: 1.437
Antigüedad: 22 años, 2 meses
Puntos: 9
Optimizar una consulta sql

Estimados, tengo la siguiente estructura de BDD

Tabla kb_biblioteca
id_archivo Autonumerico
titulo Texto
archivo Texto

tabla Kb_keywords
id autonumerico
id_archivo int
keyword

por ejemplo si tengo un elemento con lo siguiente
id_archivo = 55
Titulo = "El problema de la caña de cerveza al siguiente día de la Borrachera"
Archivo = La_ Caña.doc

y las keywords son :
Cervezas, caña, borrachera
y luego tengo otro registro con lo siguiente

id_archivo = 120
Titulo = "Bares de Santiago"
Archivo = Bares.PDF
y las keywords son :
Cerveza, Bares, ron

la consulta que viene desde un input permite al usuario final ingresar todas las palabras que estime conveniente para buscar algun tema.. independiente de las palabras claves que estos tengan..
lo malo es que si le pongo por ejemplo, en el input

Cervezas, caña, borracheras

me trae el resultado solo de lo que calce con todas la palabras claves.

y lo que quiero es que si por ejemplo puse
Cervezas, caña, borracheras

me traiga los dos registros que calzaron de alguna forma con Cervezas que existe en los dos registros..

el código que tengo es el siguiente


Código:
    key  = request.form("keywords")
    arrKey= split(key,",")
	for i = 0 to ubound(arrKey)
	  key = trim(arrkey(i))
           sql = "select * from kb_keywords where keyword  like '%"&key&"%'"
           set res = conn.execute(sql)
	next

while not res.eof 

 if busqueda ="keyword" then
   sql = "select * from kb_biblioteca where id_archivo = "&res("id_tema")&" "
   set rs = conn.execute(sql)
    while not rs.eof
      response.write(rs("titulo"))
    rs.movenext
    wend
__________________
Buena Vida...
Francisco
  #2 (permalink)  
Antiguo 06/09/2005, 13:29
 
Fecha de Ingreso: junio-2005
Mensajes: 114
Antigüedad: 19 años, 10 meses
Puntos: 0
Creo que tenés mal la ubicacion del next


key = request.form("keywords")
arrKey= split(key,",")
for i = 0 to ubound(arrKey)
key = trim(arrkey(i))
sql = "select * from kb_keywords where keyword like '%"&key&"%'"
set res = conn.execute(sql)

while not res.eof

if busqueda ="keyword" then
sql = "select * from kb_biblioteca where id_archivo = "&res("id_tema")&" "
set rs = conn.execute(sql)
while not rs.eof
response.write(rs("titulo"))
rs.movenext
wend
END IF
NEXT


Slds.
  #3 (permalink)  
Antiguo 06/09/2005, 13:46
 
Fecha de Ingreso: marzo-2003
Ubicación: onde toy?
Mensajes: 1.437
Antigüedad: 22 años, 2 meses
Puntos: 9
oooh gracia master.. no me habia dado cuenta de eso.. gracias... pero sabes.. el problema que tengo ahora.. es que

me cuenta dos veces los registros... como encuentra dos veces la palabra
cerveza...me trae 4 registros...

Me explico...
en el input puse.. "cerveza" y no "cervezas" por ello va y busca con un like... y como que dice aah encontré 4 registros cuando en realidad son 2 ... como lo pouedo arreglar más....
__________________
Buena Vida...
Francisco
  #4 (permalink)  
Antiguo 07/09/2005, 06:41
 
Fecha de Ingreso: junio-2005
Mensajes: 114
Antigüedad: 19 años, 10 meses
Puntos: 0
lo que pasa es que yo haría todo diferente desde el principio, podrias hacer una consulta que una las dos tablas, y de esta forma tener un solo select :

SELECT *
FROM kb_biblioteca A, kb_keywords B
WHERE A.id_archivo = B.id_archivo
AND keyword like '%"&key&"%

Con eso me ahorro la segunda búsqueda. Además podrías poner condiciones con respecto al título, y todo en el mismo select.

Slds. Edum.
  #5 (permalink)  
Antiguo 07/09/2005, 10:23
Avatar de onlykfk  
Fecha de Ingreso: agosto-2005
Ubicación: 20°45' Latitud Norte 100°
Mensajes: 121
Antigüedad: 19 años, 8 meses
Puntos: 1
Por ke no usas una condicion "Like" pero con un "and"
key = request.form("keywords")
arrKey= split(key,",")
sql = "select * from kb_keywords "
myfilter = ""
for i = 0 to ubound(arrKey)
key = trim(arrkey(i))
myfilter= myfilter & " like '%" & key & "%' And"
next
if(myfilter<>"") then
myfilter = " where keyword " & Left(myfilter, Len(myfilter)-3)
end if
set res = conn.execute(sql & myfilter )

de esta manera, filtras por las palabras clave, los registros que cumplan con esas palabras clave vendran en tu consulta.
Ojo: si kieres que la consulta traiga especificamente los registros que cumplan con cada una de la palabras clave, utilizas el and, pero si kieres que por lo menos cumplan con una de las palabras clave utilizas el Or y en la instruccion "Left(myfilter, Len(myfilter)-3)" la cambias por "Left(myfilter, Len(myfilter)-2)"

Espero halla sido claro y sobre todo que te pueda ayudar.

Saludos
__________________
Yo tan sólo se, que no he senado
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 11:09.