Pagination 密码分页总结果计数

Pagination 密码分页总结果计数,pagination,cypher,Pagination,Cypher,我有一个奇怪的密码查询,我需要对它的结果进行分页。我想做的是在限制完成之前得到结果的总数 这是我的测试图: 我尝试在查询的所有部分中使用计数(o),但我总是得到相同的结果:“总计数:1”。比如在这里:。我试图得到的结果应该是:“总计数:6” 我总是可以进行另一个查询来计算结果,但是执行两个查询是没有意义的 请问谁能帮我一个吗?谢谢 实现这一点的唯一方法是定义两次查询,我不确定这对性能有什么影响,我猜或者希望它是第一次缓存的。请注意:这不是一个真正的解决方案,正如我上面对问题的评论所述,如果使用超

我有一个奇怪的密码查询,我需要对它的结果进行分页。我想做的是在限制完成之前得到结果的总数

这是我的测试图:

我尝试在查询的所有部分中使用计数(o),但我总是得到相同的结果:“总计数:1”。比如在这里:。我试图得到的结果应该是:“总计数:6

我总是可以进行另一个查询来计算结果,但是执行两个查询是没有意义的


请问谁能帮我一个吗?谢谢

实现这一点的唯一方法是定义两次查询,我不确定这对性能有什么影响,我猜或者希望它是第一次缓存的。请注意:这不是一个真正的解决方案,正如我上面对问题的评论所述,如果使用超出范围的偏移量,则不会返回任何结果

// first query only to get count
MATCH (x:Brand)
WITH count(*) as total
// query again to get results  :(
MATCH (o:Brand)
WITH total, o
ORDER BY o.name SKIP 5 LIMIT 5
WITH total, collect({uuid:o.uuid, name:o.name}) AS brands
RETURN {total:total, brands:brands}
如果有人提出更好的解决方案,我也很乐意看到,花足够的时间让它正常工作。


稍微好一点的解决方案,可以处理超出范围的偏移

// first query to get results
MATCH (o:Brand)
WITH o
ORDER BY o.name SKIP 5 LIMIT 5
WITH collect({uuid:o.uuid, name:o.name}) AS brands
// then query again to get count
MATCH (x:Brand)
WITH brands, count(*) as total
RETURN {total:total, brands:brands}

但它仍然是两个查询,并且不是原始问题的有效答案

类似的问题应该可以解决:

MATCH (o:Brand)
WITH o
ORDER BY o.name 
WITH collect({uuid:o.uuid, name:o.name}) AS brands, COUNT(distinct o.uuid) AS total
UNWIND brands AS brand_row
WITH total, brand_row
SKIP 5
LIMIT 5
RETURN COLLECT(brand_row) AS brands, total;
注:这是未经测试的,类似的工作对我来说。而且,不确定它的性能如何


是的,如果您尝试在之前使用count(*)作为total进行
匹配x:Label,并通过使用
WITH
携带您的
total
,它会变得更加有趣。几乎可以正常工作,但如果查询中的偏移量超出范围,它将不会返回任何内容,不
total
,非常糟糕。我认为SQL Server在分页方面很糟糕。