我有这个问题:
match (campaign:Campaign)<-[:CREATED_FOR]-(facebookAlbum:FacebookAlbum)
where campaign.id="54b509ec851dd"
return case when campaign.isOpeningAlbum=0 then facebookAlbum
when campaign.isOpeningAlbum=1 then 1 end as result
ORDER BY facebookAlbum.openTime DESC LIMIT 1
我正在尝试返回与广告系列相关的facebookAlbums数量,我尝试这样的事情:
match (campaign:Campaign)<-[:CREATED_FOR]-(facebookAlbum:FacebookAlbum)
where campaign.id="54b509ec851dd"
return case when campaign.isOpeningAlbum=0 then facebookAlbum
when campaign.isOpeningAlbum=1 then 1 end as result,count(facebookAlbum) as count
ORDER BY facebookAlbum.openTime DESC LIMIT 1
但它给了我以下错误:
Unknown identifier `facebookAlbum`
我正在添加一个示例db- http://console.neo4j.org/r/afozkf
的链接从这个graphDB中,我需要获得具有最高openTime和facebookAlbums连接到该广告系列的facebookAlbum。 我正在检查该活动的isOpeningAlbum道具。如果它是0 ok,如果它是1则返回is_opening_album = 1
答案 0 :(得分:1)
这里的问题似乎是你在同一个声明中使用聚合count(facebookAlbum)
(第2次)和未聚合的facebookAlbum
(第1次和按顺序) - 这似乎混淆了Cypher(以及我自己)。
尝试以下方法:
MATCH (campaign:Campaign { id:'123' })
OPTIONAL MATCH (campaign)-[:CREATED_FOR]->(facebookAlbum)
WITH campaign, facebookAlbum
ORDER BY facebookAlbum.openTime DESC
RETURN campaign.id, campaign.isOpeningAlbum = 1 AS opening,
head(collect(facebookAlbum)) AS firstAlbum,
count(facebookAlbum) AS count
此声明假定有些广告系列没有任何相册 - 因此使用OPTIONAL MATCH
。 WITH
和ORDER BY
用于确保相册按时完成。最终报表使用head(collect())
查找第一张专辑,count
自我描述。
如果您有大量相册与广告系列相关联,您可以考虑重构图表模型。相册基本上根据创建时间形成链接列表。使用NEXT
或PREV
关系,您可以在图表中明确显示该结构,并加快查询速度。