【问题标题】:Prioritizing data while sorting in DbXML在 DbXML 中排序时确定数据的优先级
【发布时间】:2013-01-09 12:39:30
【问题描述】:

在 DBXML 中使用 XQuery 我想根据设置为特定值的多个节点确定某些元素的优先级。

我希望能够在顶部显示其中的三个元素,其余的在下方显示。

<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”。如果整个结果集中没有这些机构,我们可以按正常排序顺序显示它们。

【问题讨论】:

  • 您看过 XQuery 中的order by 吗?如果是,请更具体地说明您的问题,包括示例数据和所需的输出,如果您有任何示例代码。
  • @Ranon 感谢您的回复。我有数百个数据要排序并说“品牌”是该数据库中的一个字段。我在过滤一些数据时执行此命令。如果过滤后的数据具有“Brand=Sony”,则它应该始终位于结果集的顶部。例如,您有一些特色产品,并且希望始终在顶部显示这些产品。如果您需要更多详细信息,请告诉我。再次提前感谢
  • 现在好多了,您介意更新您的问题吗?对于以后的问题,请包括一些示例数据/代码,这比仅一些文本(另外缺少适当的标点符号)要精确得多。您要求其他人花时间免费帮助您;请让他们尽可能轻松 - 您会发现更多愿意帮助您的人。
  • @Ranon 很抱歉在我的问题中没有详细说明,因为我在发布此内容后要去其他地方。我现在要编辑问题

标签: xquery berkeley-db-xml


【解决方案1】:

XQuery 的 flwor 表达式知道 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) ]/.
)

布尔表达式可以变得任意复杂,以便在顶级产品上更精确,例如限制电视或定义一些最低价格。

【讨论】:

  • 我更新了我的答案以适合您的问题。我也对其进行了编辑,以使其更准确,并将其简化为实际问题;如果它仍然与您的问题相似,也许可以看看它。
  • 这些信息真的很有帮助,我们差不多完成了,但还有一个问题。我已经更新了这个问题。你能查一下吗?
  • 对不起,我以为它已经发布了。不知怎的,它没有被保存。请给我几分钟,因为我现在正在编辑问题
  • 请多注意可读代码;将整个 flwor 表达式压缩在单行中,这些表达式肯定会被多次包装,这是不好的编码标准(并且没有格式化,至少我不理解该代码的任何内容)。如果您真的想要答案,请在您的问题上投入更多精力。
猜你喜欢
  • 1970-01-01
  • 2014-08-05
  • 1970-01-01
  • 2018-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多