Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Invité régulier
    Inscrit en
    avril 2010
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : avril 2010
    Messages : 59
    Points : 8
    Points
    8

    Par défaut jointure avec FLWOR

    Bonjour
    soit la requète XQuery:

    Code :
    1
    2
    3
    4
    5
    6
    7
    for $p in doc("catalog.xml")//product
    let $itm := doc("order.xml")/order/item[@num=$p/number]
    where $p/number = $itm/@num
    return
    <item num="{$itm/@num}" name="{$p/name}" 
    quantity="{$itm/@quantity}" 
    color="{$itm/@color}"/>
    le document: catalog.xml

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?xml version="1.0"?>
    <catalog>
    <product dept="WMN">
    <number>557</number>
    <name language="en">Fleece Pullover</name>
    <colorChoices>navy black</colorChoices>
    </product>
    <product dept="ACC">
    <number>563</number>
    <name language="en">Floppy Sun Hat</name>
    </product>
    <product dept="ACC">
    <number>443</number>
    <name language="en">Deluxe Travel Bag</name>
    </product>
    <product dept="MEN">
    <number>784</number>
    <name language="en">Cotton Dress Shirt</name>
    <colorChoices>white gray</colorChoices>
    <desc>Our <i>favorite</i> shirt!</desc>
    </product>
    </catalog>
    le document: order.xml
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?xml version="1.0"?>
    <order num="00299432" date="2006-09-15" cust="0221A">
    <item dept="WMN" num="557" quantity="1" color="navy"/>
    <item dept="ACC" num="563" quantity="1"/>
    <item dept="ACC" num="443" quantity="2"/>
    <item dept="MEN" num="784" quantity="1" color="white"/>
    <item dept="MEN" num="784" quantity="1" color="gray"/>
    <item dept="WMN" num="557" quantity="1" color="black"/>
    </order>
    résultat obtenu:
    Code :
    <item num="557 557" name="Fleece Pullover" quantity="1 1" color="navy black"/><item num="563" name="Floppy Sun Hat" quantity="1" color=""/><item num="443" name="Deluxe Travel Bag" quantity="2" color=""/><item num="784 784" name="Cotton Dress Shirt" quantity="1 1" color="white gray"/>
    je n'attend pas ce résultat.j'aimerais avoir des éxplications sur le résultat obtenu.

    Merci

  2. #2
    Expert Confirmé Avatar de Loceka
    Profil pro Tlouye Ci
    Inscrit en
    mars 2004
    Messages
    2 043
    Détails du profil
    Informations personnelles :
    Nom : Tlouye Ci

    Informations forums :
    Inscription : mars 2004
    Messages : 2 043
    Points : 3 810
    Points
    3 810

    Par défaut

    En XQuery, comme en XPath, les opérations sont ensemblistes.

    Ici par exemple, quand tu écris doc("order.xml")/order/item[@num=$p/number] (ce qui est redondant avec ta clause where soit dit en passant), tu remontes tous les items dont @num est égal à $p/number.

    Ce qui fait que quand tu demandes de retourner le résultat de $itm/@attribut, il te retourne les valeurs de @attribut pour chaque item matché.

    Ce qu'il faudrait faire, ce serait une boucle imbriquée :
    Code :
    1
    2
    3
    4
    5
    for $p in doc("catalog.xml")//product
    return for $itm in doc("order.xml")/order/item[@num=$p/number]
      return <item num="{$itm/@num}" name="{$p/name}" 
    quantity="{$itm/@quantity}" 
    color="{$itm/@color}"/>

  3. #3
    Invité régulier
    Inscrit en
    avril 2010
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : avril 2010
    Messages : 59
    Points : 8
    Points
    8

    Par défaut

    merci infiniment pour l'explication. cet exemple (les deux requètes) montre bien la différence entre let et for

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •