1

DBXML で XQuery を使用する 特定の値に設定された複数のノードに応じて、いくつかの要素に優先順位を付けたいと考えています。

この要素のうち 3 つを上に、残りを下に表示できるようにしたいと考えています。

<properties>
   <property>
       <zip_code>5550</zip_code>
       <agency>ABC</agency>
   </property>
   <property>
       <zip_code>5550</zip_code>
       <agency>DEF</agency>
   </property>
   <property>
       <zip_code>5550</zip_code>
       <agency>DEF</agency>
   </property>
   <property>
       <zip_code>XYZ</zip_code>
       <agency>ABC</agency>
   </property>
</properties>

プロパティ検索ページでこの XML を取得しています。実際の検索結果には数百のレコードが含まれますが、最初のページに表示するために最初の 10 レコードのみを取得しています。ここでは、「ABC」という代理店のプロパティが表示され、その後に郵便番号「XYZ」が常に一番上に表示される並べ替え順序を適用する必要があります。結果セット全体にこれらの機関が含まれていない場合は、通常の並べ替え順序で表示できます。

4

1 に答える 1

3

XQuery の flwor-expressions はorder by、計算も可能な任意の値で順序付けできる を知っています。一部の製品が「トップ製品」であるかどうかを決定する式を使用します (ブール値になります)。

その後、結果シーケンスを分割して、いくつかの結果のみを強調表示し、合計結果に制限します。

let $highlighted := 3
let $total := 10
let $sorted := 
  for $p in //property
  (: order by highlighting predicate :)
  order by $p/agency eq "ABC" and $p/zip_code eq "XYZ" descending
  return $p
return (
  (: first $highlighted elements as defined by predicates above :)
  $sorted[ position() = (1 to $highlighted) ],
  (: the other elements, `/.` forces sorting back to document order :)
  $sorted[ position() = ($highlighted + 1 to $total) ]/.
)

ブール式は、テレビに限定したり、最低価格を定義したりするなど、上位の製品をより正確にするために、任意の複雑なものになる可能性があります。

于 2013-01-09T15:40:11.683 に答える