Ordenación en XQuery

Hola a todos, hoy os voy a explicar como podemos ordenar en XQuery.

En XQuery, podemos ordenar los datos de nuestra consulta con order by.

Veamos un pequeño ejemplo con nuestro xml de bailes:

<?xml version="1.0" encoding="UTF-8"?>

<bailes
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:noNamespaceSchemaLocation="BDbaile.xsd">
 
<baile id="1">
 <nombre>Tango </nombre>
 <precio cuota="mensual" moneda="euro">27</precio>
 <plazas>20</plazas>
 <comienzo>1/01/2012</comienzo>
 <fin>1/12/2012</fin>
 <profesor>Roberto Garcia</profesor>
 <sala>1</sala>
</baile>

<baile id="2">
 <nombre>Cha-cha-cha </nombre>
 <precio cuota="trimestral" moneda="euro">80</precio>
 <plazas>18</plazas>
 <comienzo>1/07/2012</comienzo>
 <fin>1/10/2012</fin>
 <profesor>Miriam Gutiérreza</profesor>
 <sala>1</sala>
</baile>

<baile id="3">
 <nombre>Rock </nombre>
 <precio cuota="mensual" moneda="euro">30</precio>
 <plazas>15</plazas>
 <comienzo>1/01/2012</comienzo>
 <fin>1/12/2012</fin>
 <profesor>Laura Mendiola</profesor>
 <sala>1</sala>
</baile>

<baile id="4">
 <nombre>Merengue </nombre>
 <precio cuota="trimestral" moneda="dolares">75</precio>
 <plazas>12</plazas>
 <comienzo>1/01/2012</comienzo>
 <fin>1/12/2012</fin>
 <profesor>Jesús Lozano</profesor>
 <sala>2</sala>
</baile>

<baile id="5">
 <nombre>Salsa </nombre>
 <precio cuota="mensual" moneda="dolares">32</precio>
 <plazas>10</plazas>
 <comienzo>1/01/2012</comienzo>
 <fin>1/12/2012</fin>
 <profesor>Jesús Lozano</profesor>
 <sala>2</sala>
</baile>

<baile id="6">
 <nombre>Pasodoble </nombre>
 <precio cuota="anual" moneda="euro">3200</precio>
 <plazas>8</plazas>
 <comienzo>1/01/2012</comienzo>
 <fin>1/12/2012</fin>
 <profesor>Miriam Gutierrez</profesor>
 <sala>2</sala>
</baile>

</bailes>

Si queremos ordenar los bailes por nombre, lo haríamos así:

for $baile in doc("bailes.xml")//baile
order by $baile/nombre
return $baile

Este es el resultado:

Por defecto, se ordena de forma ascendente. si queremos ordenar de forma descendente:

for $baile in doc("bailes.xml")//baile
order by $baile/nombre descending
return $baile

Este es el resultado:

De todas formas, si ponemos ascending ordenaría de forma ascendente.

También podemos ordenar por mas de un campo, en caso de empate, se ordenará por el segundo campo.

for $baile in doc("bailes.xml")//baile
order by $baile/plazas, $baile/nombre
return $baile

Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.

Compartir

Deja una respuesta

Tu dirección de correo electrónico no será publicada.