26 - Order by (Ordenamiento de los registros por un campo)


Para ordenar el resultado de un SELECT debemos utilizar la cláusula "order by" seguida por el nombre de campo.

Por defecto, si no aclaramos en la sentencia, los ordena de manera ascendente (de menor a mayor). Podemos ordenarlos de mayor a menor, para ello agregamos la palabra clave "desc" seguida al nombre del campo.

Para probar esta característica del select y como puede ayudarnos en el desarrollo de una página confeccionaremos el listado de la tabla artículos disponiendo dos hipervínculos en los títulos del precio y descripción del artículo. Al ser presionado llamaremos a la misma página y le pasaremos como parámetro por que campo queremos ordenar los registros en la consulta.

pagina1.asp

<%option explicit%>
<html>
<head>
<title>problema</title>
</head>
<body>
<%
dim ordenado
if request.querystring("ord") is nothing Then
  ordenado=""
elseif request.querystring("ord")="descripcion" Then
  ordenado=" order by descripcion"
elseif request.querystring("ord")="precio" Then
  ordenado=" order by precio"
end if
dim conexion
set conexion = Server.CreateObject("ADODB.Connection")
conexion.ConnectionString = "Provider=SQLOLEDB.1;" & _
    "Data Source=.;" & _
    "Integrated Security=SSPI;" & _
    "Persist Security Info=False;" & _
    "Initial Catalog=wi630629_aspya"
conexion.Open
dim registros
set registros = Server.CreateObject("ADODB.RecordSet") 
registros.open "select descripcion,precio from articulos" & ordenado,conexion
response.write("<table border=""1"">")
response.write("<tr><th><a href=""pagina1.asp?ord=descripcion"">Descripción</a></th><th><a 
href=""pagina1.asp?ord=precio"">Precio</a></th></tr>")
do while not registros.eof
  response.write("<tr>")
  response.write("<td>")
  response.write(registros("descripcion"))
  response.write("</td>")
  response.write("<td>")
  response.write(registros("precio"))
  response.write("</td>")
  response.write("</tr>")
  registros.movenext
loop
response.write("</table>")
conexion.close
%>
</body>
</html> 

Veamos las partes más importantes de este algoritmo. Primero verificamos si llega algún parámetro en la llamada a la página:

dim ordenado
if request.querystring("ord") is nothing Then
  ordenado=""
elseif request.querystring("ord")="descripcion" Then
  ordenado=" order by descripcion"
elseif request.querystring("ord")="precio" Then
  ordenado=" order by precio"
end if

Es decir si llamamos a esta página sin pasar el parámetro ord el primer if se verifica verdadero y la variable ordenado se inicializa con una cadena vacía:

  ordenado=""

En caso que llegue el parámetro ord debemos verificar si hay que ordenar por el campo precio o descripción:

elseif request.querystring("ord")="descripcion" Then
  ordenado=" order by descripcion"

Si llega el valor descripcion en el parámetro ord procedemos a inicializar la variable ordenado con la cadena "order by descripción".

Al comando select se le añade al final el contenido de la variable ordenado:

registros.open "select descripcion,precio from articulos" & ordenado,conexion

Recordemos que la cadena ordenado puede tener alguno de los tres valores que se asignan al comienzo de este algoritmo.

Otra parte importante de este algoritmo son los hipervínculos a la misma página pasando como parámetro la variable ord con el valor respectivo:

response.write("<tr><th><a href=""pagina1.asp?ord=descripcion"">Descripción</a></th><th><a 
href=""pagina1.asp?ord=precio"">Precio</a></th></tr>")

El resto de la página es similar a un listado visto en conceptos anteriores.


Retornar