그래서, 여기 내 질문입니다 "동적으로.주문 결과는
EG :
declare function getSearchResults(
$query as cts:query,
$sort as xs:string*,
$direction as xs:string*,
) as element()* {
let $results :=
cts:search(/*, $query)
let $sortFields := fn:tokenize($sort, "\|")
let $dec := $direction = 'desc' or $direction = 'descending'
let $sorted := sortByFields($results, $sort,$dec)
return $sorted
};
declare private function sortByFields ($results, $sortFields, $dec)
{
let $asc := fn:not($dec)
for $i in $results
order by
if ($sortFields[1]='id' and $asc) then $i//ldse:document/@id else(),
if ($sortFields[1]='id' and $dec) then $i//ldse:document/@id else() descending,
if ($sortFields[1]='title' and $asc) then $i//title else(),
if ($sortFields[1]='title' and $dec) then $i//title else() descending
return if (fn:count($sortFields) > 1) then (sortByFields($i,$sortFields[2 to fn:count($sortFields)],$dec)) else ($i)
};
이 방법은 여러 번 정렬 할 수 있기 때문에 작동하지 않습니다, 정렬 순서를 각각의 반복을 보존하지 않습니다.
let $sortFields := fn:tokenize($sort, "\|")
let $dec := $direction = 'desc' or $direction = 'descending'
let $asc := fn:not($dec)
for $i in $results
for $j in 1 to fn:count($sortFields)
order by
if ($sortFields[$j]='id' and $asc) then $i//ldse:document/@id else(),
if ($sortFields[$j]='id' and $dec) then $i//ldse:document/@id else() descending,
if ($sortFields[$j]='title' and $asc) then $i//title else(),
if ($sortFields[$j]='title' and $dec) then $i//title else() descending
return $i
그러나 이것은 내 데이터를 복제 :
나는 또한이 시도. (각 정렬 필드별로 정렬 된 순서대로 반환)
코드 삽입 때문에 xdmp : eval을 사용하지 않는 것이 좋을 것입니다.
도움이나 제안 사항을 보내 주시면 감사하겠습니다.
감사합니다.
정말 고마워요! – StuBob
@StuBob이 답변으로 문제를 해결하는 데 도움이 되었다면 답을 수락하십시오 (녹색 체크 표시가 나타남). 또한 SO에 오신 것을 환영합니다! – dirkk