Ver Mensaje Individual
  #3 (permalink)  
Antiguo 23/05/2007, 15:27
Avatar de soorellana
soorellana
 
Fecha de Ingreso: mayo-2007
Mensajes: 9
Antigüedad: 18 años
Puntos: 0
Re: Búsqueda en toda la web

Te voy a dar una idea que talvés te sirva, a lo mejor no sea la más adecuada en cuanto a rendimiento ni a rapidez, pero por lo menos me ha servido a mí.

La idea básica consiste en crear vistas (o consultas almacenadas) dentro de la base de datos de forma tal que te devuelvan todas igual número de campos para luego unirlas todas en una sola consulta adonde puedas realizar la búsqueda.

Si por ejemplo tienes una tabla llamada Nosotros en la cual almacenas un texto descriptivo acerca de la empresa la consulta te podría quedar así:

Código:
SELECT 1 AS id, nosotros.titulo, trim(nosotros.contenido) AS texto, 
99 AS dia, 999 AS mes, 9999 AS anio, 1 AS activo, "nosotros.asp" AS vinculo
FROM nosotros;
Llamenos esta consulta Consulta_Nosotros

Si observas bien, la idea es que todo el texto me quede en el campo texto para luego utlizarlo para realizar la búsqueda.

Ahora por ejemplo puedes tener una tabla con noticias la consulta puede quedarte así:

Código:
SELECT Noticia.id, Noticia.titulo, trim(Noticia.resumen) & 
trim(Noticia.contenido) AS texto, 
day(Noticia.fecha) AS dia, month(Noticia.fecha) AS mes, 
year(Noticia.fecha) AS anio, 
Noticia.activa AS activo, "vnoticias.asp" AS vinculo
FROM Noticia;
Pongámosle de nombre a esta consulta: Consulta_Noticias

Sucesivamente deberás ir concatenando los campos que necesites dentro del campo texto y obviamente la estructura de todas las consultas debe ser la misma. Al final solamente deberás unir todas las consultas en una sola así:

Código:
SELECT * 
FROM Consulta_Nosotros
UNION ALL SELECT *
FROM Consulta_Nosotros_Valores
UNION ALL SELECT *
FROM Consulta_Noticias
UNION ALL SELECT *
FROM Consulta_Publicaciones
UNION ALL SELECT *
FROM Consulta_Agenda
Le pondremos a esta consulta: Buscar_en_Database

Recuerda que todo esto lo haces dentro de Access.
ahora bien, en tu página web solamente deberás ejecutar una consulta contra la "Tabla" Buscar_en_Database y listo. Si observas yo he incluido un campo llamado vinculo el cual me servira para saber en que pagina de mi sitio voy a visualizar cada registro devuelto.

El codigo del formulario seria algo asi:
Código:
	<form name="buscar" method="post" action="busqueda.asp" 
enctype="application/x-www-form-urlencoded">
	<fieldset>
		<label for="criterio">Buscar:</label>
		<input class="criterio" name="criterio" size="20" type="text"
          value="<%=Server.HTMLEncode(trim(request.form("criterio")))%>" />>
		<input type="submit" value="Buscar" />
	</fieldset>
	</form>
Y el codigo de busqueda en ASP seria algo como esto:
Código:
<%
 criterio=TRIM(Request.Form("criterio"))

        Set cRS = Server.CreateObject("ADODB.Recordset")
	cRS.ActiveConnection = Conexion_a_tu_DB
	cRS.Source = buscar(criterio,year(now()))
	cRS.CursorType = 1
	cRS.CursorLocation = 2
	cRS.LockType = 1
	cRS.Open()	 


Public Function buscar(TxtCriterios,anio)
	Dim criterio
        TxtCriterios = Replace(TxtCriterios,"'","")
        TxtCriterios = Replace(TxtCriterios,"""","")	   
	
	buscar = "SELECT * FROM Buscar_en_Database WHERE "
	
	For Each criterio In Split(TxtCriterios, " ")
		If Len(Trim(criterio)) > 0 Then buscar = buscar & " texto LIKE '%" & trim(criterio) & "%' AND "
	Next
		
	buscar = buscar & " 1 = 1 "
End Function

%>
Espero que te sirva.