Acotación de resultados


http://www.asptutor.com


Acotación de resultados

 Colaboración enviada por CESAR BELTRAN

 

Hola, este es un ejemplo basado en una inmobiliaria pero se puede aplicar a cualquier otra cosa variando los datos correspondientes.

En este caso lo que se está haciendo es una acotación de búsqueda dependiendo de los datos y la cantidad de ellos que envíe el usuario, me explico, imaginemos una búsqueda de inmuebles que se pueda acotar por Tipo (piso, chalet, etc.), precio (en este ejemplo en Euros) y por Zona (por ejemplo Código postal).

El problema viene dado por que puede que en la acotación se indique:

- Ningún dato
- Alguno de los 3 exclusivamente
- Solo dos de ellos
- Los 3 a la vez.

Esto da como resultado 8 posibilidades que tienen los usuarios para acotar la búsqueda.

Para mejorar un poco los resultados se aplica un margen de 12.000€ a la acotación por importe.
 


<% Dim opcion
opcion = 0
' recojemos los valores del formulario de acotacion
If (Request.Form("tipo") <> "") Then opcion = opcion + 1
If (Request.Form("precio") <> "") Then opcion = opcion + 10
If (Request.Form("zona") <> "") Then opcion = opcion + 100
' con esto averiguamos cual de las 8 posibiliadades ha seleccionado el usuario de forma que:
'ningun dato = 0
'solo tipo = 1
'solo precio = 10
'solo zona = 100
'tipo + precio = 11
'tipo + zona = 101
'precio + zona = 110
'todos = 111

Dim tipo
tipo = ""
Dim zona
zona = ""
Dim precio
precio = 0
If (Request.Form("tipo") <> "") Then inmo = Request.Form("tipo")
If (Request.Form("zona") <> "") Then zona = Request.Form("zona")
If (Request.Form("precio") <> "") Then precio = Request.Form("precio")

Dim Recordset1
Dim Recordset1_numRows
Set Recordset1 = Server.CreateObject("ADODB.Recordset")
Recordset1.ActiveConnection = MICONEXION

select case opcion
case 0 'ningun dato
Recordset1.Source = "SELECT * FROM pisos ORDER BY PRECIO_EUROS DESC"
case 1 ' solo tipo
Recordset1.Source = "SELECT * FROM pisos WHERE TIPO_INMO = '" + Replace(tipo, "'", "''") + "' ORDER BY PRECIO_EUROS DESC"
case 10 ' solo precio
v_importe_desde = precio-12001
v_importe_hasta = precio+12001
Recordset1.Source = "SELECT * FROM pisos WHERE PRECIO_EUROS >= " & v_importe_desde & " AND PRECIO_EUROS <= " & v_importe_hasta & " ORDER BY PRECIO_EUROS DESC"
case 100 ' solo zona
Recordset1.Source = "SELECT * FROM pisos WHERE ZONA_WEB = '" + Replace(zona, "'", "''") + "' ORDER BY PRECIO_EUROS DESC"
case 11 ' tipo + precio
v_importe_desde = precio-12001
v_importe_hasta = precio+12001
Recordset1.Source = "SELECT * FROM pisos"
Recordset1.Source = Recordset1.Source + " WHERE TIPO_INMO = '" & tipo & "'"
Recordset1.Source = Recordset1.Source + " AND PRECIO_EUROS >= " & v_importe_desde & " AND PRECIO_EUROS <= " & v_importe_hasta
Recordset1.Source = Recordset1.Source + " ORDER BY PRECIO_EUROS DESC"
case 101 ' tipo + zona
Recordset1.Source = "SELECT * FROM pisos"
Recordset1.Source = Recordset1.Source + " WHERE TIPO_INMO = '" & tipo & "'"
Recordset1.Source = Recordset1.Source + " AND ZONA_WEB = '" & zona & "'"
Recordset1.Source = Recordset1.Source + " ORDER BY PRECIO_EUROS DESC"
case 110 ' precio + zona
v_importe_desde = precio-12001
v_importe_hasta = precio+12001
Recordset1.Source = "SELECT * FROM pisos"
Recordset1.Source = Recordset1.Source + " WHERE ZONA_WEB = '" & zona & "'"
Recordset1.Source = Recordset1.Source + " AND PRECIO_EUROS >= " & v_importe_desde & " AND PRECIO_EUROS <= " & v_importe_hasta
Recordset1.Source = Recordset1.Source + " ORDER BY PRECIO_EUROS DESC"
case 111 ' los tres datos
v_importe_desde = precio-12001
v_importe_hasta = precio+12001
Recordset1.Source = "SELECT * FROM pisos"
Recordset1.Source = Recordset1.Source + " WHERE ZONA_WEB = '" & zona & "'"
Recordset1.Source = Recordset1.Source + " AND TIPO_INMO = '" & tipo & "'"
Recordset1.Source = Recordset1.Source + " AND PRECIO_EUROS >= " & v_importe_desde & " AND PRECIO_EUROS <= " & v_importe_hasta
Recordset1.Source = Recordset1.Source + " ORDER BY PRECIO_EUROS DESC"
end select

Recordset1.CursorType = 0
Recordset1.CursorLocation = 2
Recordset1.LockType = 1
Recordset1.Open()
Recordset1_numRows = 0

%>