2017-03-15 81 views
6

我试图从jcr中的不同区域抓取同一类型的多个节点,并按日期排序。如何使用多个isdescendantnode的订单

SELECT * FROM [social:asiResource] 
WHERE [sling:resourceType] = 'social/qna/components/hbs/topic' AND 
[isFeatured_b] = true AND 
NOT CONTAINS([cq:tags],'administrative:blacklist') AND 
(ISDESCENDANTNODE([/path/to/content]) OR 
ISDESCENDANTNODE([/path/to/content])) 
ORDER BY [cq:lastModified] DESC 

这将返回正确的一组结果,但不正确的顺序。实际上改变DESCASC不会以任何方式改变结果。

我现在的解决方案是做多个查询,并执行一个联合,允许ORDER BY像它应该那样工作。

SELECT * FROM [social:asiResource] 
WHERE [sling:resourceType] = 'social/qna/components/hbs/topic' AND 
[isFeatured_b] = true AND 
NOT CONTAINS([cq:tags],'administrative:blacklist') AND 
ISDESCENDANTNODE([/path/to/content]) 
UNION 
SELECT * FROM [social:asiResource] WHERE 
[sling:resourceType] = 'social/qna/components/hbs/topic' AND 
[isFeatured_b] = true AND 
NOT CONTAINS([cq:tags],'administrative:blacklist') AND 
ISDESCENDANTNODE([/path/to/content]) 
ORDER BY [cq:lastModified] DESC 

不幸的是我有大约30个节点,我通过搜索使后者查询不可用。有没有办法在不使用UNION的情况下使用ORDER BY

回答

0

最初的查询现在正在工作。似乎还有一些其他因素导致ORDER BY未给出有效结果。

要说明你可以ORDER BY当使用多个ISDESCENDANTNODE's。

+0

另外'NOT CONTAINS'似乎减慢了查询的速度。 – apothic