2013-12-18 2 views
0

우선, 오해의 소지가있는 문구로 인해 유감스럽게 생각합니다.이 질문을 공식적으로 설명하는 데 어려움이 있습니다.xQuery 여러 루프에 대한 결과를 정렬하는 방법

다음 XML 파일을 사용하십시오. 여기에는 여러 플레이어, 각기 다른 팀에 대한 정보가 포함되어 있으며이 두 파일의 관계는 PlayerTeams라고합니다.

<Ligue> 
    <Players> 
     <Player> 
      <PlayerId>1</PlayerId> 
      <PlayerName>Johnson</PlayerName> 
      <PlayerFirstName>Steven</PlayerFirstName> 
     </Player> 

     <Player> 
      <PlayerId>2</PlayerId> 
      <PlayerName>Bob</PlayerName> 
      <PlayerFirstName>Billy</PlayerFirstName> 
     </Player> 

     <Player> 
      <PlayerId>3</PlayerId> 
      <PlayerName>Smith</PlayerName> 
      <PlayerFirstName>John</PlayerFirstName> 
     </Player> 
    </Players> 

    <Teams> 
     <Team> 
      <TeamId>1</TeamId> 
      <TeamName>The super Zubats</TeamName> 
     </Team> 

     <Team> 
      <TeamId>2</TeamId> 
      <TeamName>The diglets trio</TeamName> 
     </Team> 
    </Teams> 

    <PlayerTeams> 
     <PlayerTeam> 
      <PlayerId>1</PlayerId> 
      <TeamId>1</TeamId> 
      <DateBegin>2013-12-01</DateBegin> 
      <DateEnd></DateEnd> 
      <Number>69</Number> 
     </PlayerTeam> 

     <PlayerTeam> 
      <PlayerId>1</PlayerId> 
      <TeamId>2</TeamId> 
      <DateBegin>2013-01-10</DateBegin> 
      <DateEnd>2013-11-20</DateEnd> 
      <Number>69</Number> 
     </PlayerTeam> 

     <PlayerTeam> 
      <PlayerId>2</PlayerId> 
      <TeamId>2</TeamId> 
      <DateBegin>2013-01-10</DateBegin> 
      <DateEnd></DateEnd> 
      <Number>12</Number> 
     </PlayerTeam> 

     <PlayerTeam> 
      <PlayerId>3</PlayerId> 
      <TeamId>2</TeamId> 
      <DateBegin>2013-01-10</DateBegin> 
      <DateEnd></DateEnd> 
      <Number>73</Number> 
     </PlayerTeam> 
    </PlayerTeams> 
</Ligue> 

여기서해야 할 일은 Xquery를 사용하여 팀에서 플레이하는 모든 플레이어를 찾는 것입니다. 결국 팀과 그 안에있는 모든 플레이어의 목록을 작성해야합니다. 불행히도, 나는 XQuery를 정말 새로 온 사람과 내가하고 관리하는 모든 날이

<?xml version="1.0" encoding="UTF-8"?> 
<Team> 
    <TeamName>The super Zubats</TeamName> 
    <Player>Steven Johnson</Player> 
</Team> 
같은 결과를 제공 다음 코드

for $b in doc("ligue.xml")/Ligue/Teams/Team, 
    $c in doc("ligue.xml")/Ligue/PlayerTeams/PlayerTeam, 
    $d in doc("ligue.xml")/Ligue/Players/Player 
      where $c/TeamId = $b/TeamId and empty($c/DateEnd) and $c/PlayerId = $d/PlayerId 
       return <Team>{$b/TeamName,<Player>{string($d/PlayerFirstName), string($d/PlayerName)}</Player>}</Team> 

로, 그가에서 재생하는 팀과 각 선수를 나열하는 것입니다

누군가 내 목표를 달성하는 방법에 대한 힌트를 줄 수 있는지 궁금합니다. 나는 "let"을 사용하려고했지만 올바르게 사용하는 방법을 이해하지 못하는 것 같습니다.

답변

2

먼저 팀을 반복 처리 한 후 선수들과 playerTeams을 통해 가입 할 :이 쿼리를 희망

for $team in doc("ligue.xml")/Ligue/Teams/Team 
    return 
    <Team> 
     {$team/TeamName} 
     {for $player in doc("ligue.xml")/Ligue/Players/Player, 
      $playerTeam in doc("ligue.xml")/Ligue/PlayerTeams/PlayerTeam 
      where $player/PlayerId = $playerTeam/PlayerId and $playerTeam/TeamId = $team/TeamId 
      return $player} 
    </Team> 

은 자명하지만, 코멘트 : 의도 한대로 정확하게 일

+0

를 추가하지 않을 경우! 도움 주셔서 대단히 감사합니다. – Cocotton

관련 문제