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. Los campos obligatorios están marcados con *