1
for $i in cts:search(fn:collection()/article, $query)
    let $snippet :=  
        search:snippet( $i,.....)  

  order by if ($randomize) then ()   
     else if($sort-by = "ascending") then  
      xs:date($i/date_posted), cts:score($i)  
     else xs:date($i/date_posted) descending, cts:score($i) descending    

return
 element{"article"}
{ .....
  .....
  .....
}

问题:
在上面的 x-query 语句中,order by 子句有一个条件,if($randomize) then ()否则提供的输出将以降序方式。

我有一个要求,根据用户提供的排序类型,我想以升序或降序的方式提取结果。

但是对于上述编写的代码,我的 x-query 语句将无法验证。

提前致谢,
~Prashant

4

1 回答 1

2

不幸的是,XQuery 中的排序规范是静态的,甚至比 XSLT 中的还要多。如果要在升序或降序之间动态切换,唯一的方法是反转排序键。这对数字来说很容易——只需使用 -(KEY) 而不是 (KEY)。日期也不是太难 - 从未来的某个固定日期中减去日期(实际上是任何日期)。我想不出任何方便的方法来处理字符串,但幸运的是你似乎没有使用字符串。

于 2012-05-24T12:56:04.687 回答