Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: martilium en 3 Abril 2014, 16:53 pm



Título: Ayuda xquery xml
Publicado por: martilium en 3 Abril 2014, 16:53 pm
Hola ,en un ejercicio de base de datos xquery necesito sacar el nombre de la zona,el numero de productos que tiene y la denominación del producto que tiene el mínimo stock ordenado por el nombre de zona (alfabéticamente).

tengo hecho casi todo menos el nombre de la denominación que no muestra nada.


el resultado :

Zona:Andalucía   Productes:2   Mínim stock:
Zona:Extremadura-Galicia   Productes:3   Mínim stock:
Zona:Levante-Cataluña   Productes:4   Mínim stock:
Zona:Madrid-CENTRO   Productes:4   Mínim stock:


mi código:

for $zone in distinct-values(/productos/produc/cod_zona)
let $numero := count(/productos/produc[cod_zona = $zone]/cod_prod)
let $nomzona:=/zonas/zona[cod_zona = $zone]/nombre
let $minimo :=min(/productos/produc[cod_zona = $zone]/stock_minimo)
let $deno :=/productos/produc[stock_minimo=$minimo]/denominacion
order by $nomzona ascending
return concat( 'Zona:', $nomzona,'   ',
               'Productes:', $numero,'   ',
               'Mínim stock:', $deno
)

el xml:

productos.xml:

productos>
<TITULO>DATOS DE LA TABLA PRODUCTOS</TITULO>
<produc>
<cod_prod>1010</cod_prod>
<denominacion>Placa Base MSI G41M-P26</denominacion>
<precio>50</precio>
<stock_actual>10</stock_actual>
<stock_minimo>3</stock_minimo>
<cod_zona>10</cod_zona>
</produc>
<produc>
<cod_prod>1011</cod_prod>
<denominacion>Micro Intel Core i5-2320</denominacion>
<precio>120</precio>
<stock_actual>3</stock_actual>
<stock_minimo>5</stock_minimo>
<cod_zona>10</cod_zona>
</produc>
<produc>
<cod_prod>1012</cod_prod>
<denominacion>Micro Intel Core i5 2500</denominacion>
<precio>170</precio>
<stock_actual>5</stock_actual>
<stock_minimo>6</stock_minimo>
<cod_zona>20</cod_zona>
</produc>
<produc>
<cod_prod>1013</cod_prod>
<denominacion>HD Seagate Barracuda 250GB SATA</denominacion>
<precio>80</precio>
<stock_actual>10</stock_actual>
<stock_minimo>5</stock_minimo>
<cod_zona>20</cod_zona>
</produc>
<produc>
....
....
.....




el otro xml

zonas.xml:

<zonas>
<TITULO>DATOS DE LA TABLA ZONAS</TITULO>
<zona>
<cod_zona>10</cod_zona>
<nombre>Madrid-CENTRO</nombre>
<director>Pedro Martín</director>
</zona>
<zona>
<cod_zona>20</cod_zona>
<nombre>Extremadura-Galicia</nombre>
<director>Alicia Pérez</director>
</zona>
<zona>
....
...
...

A ver si alguien se lo ocurre algo .
Gracias


Edito:me han dado la respuesta en otro sitio .pongo la solución para los que tengan un problema similar .



había que limitar la zona también en la variable $deno .

let $deno := /productos/produc[cod_zona = $zone][stock_minimo=$minimo]/denominacion