多次退货时总计数发生变化

时间:2019-01-18 02:02:54

标签: neo4j cypher

我正在通过php发送密码查询。

match (n:person)-[:watched]->(m:movie)
where m.Title in $mycollection
return count(distinct n.id);

这将返回观看我收藏的电影的人数。 我实际上想返回名称列表,并返回n.name正常。

当我尝试同时返回n.name和count(distinct n.id)时,我丢失了总计数并获得了每行的计数。

match (n:person)-[:watched]->(m:movie)
where m.Title in $mycollection
return n.name, count(distinct n.id);

不起作用。计数列每行显示为1。

在使用php时,我也尝试过:

$count = $result->getNodesCount();

无济于事。所以我用php来计数数组。但是感觉Cypher应该能够做到,对吧?

1 个答案:

答案 0 :(得分:1)

return n.name, count(distinct n.name)的意思是“返回每个不同的n.name值及其不同值的数量”。该数字必须始终为1,因为显然不同的值是不同的。

如果您实际上是在寻找每个人与标题为$mycollection的电影有外向联系的次数,请改为这样做(其中count(*)会计算给定{ {1}}被匹配):

n.name

请注意,上述查询省略了在查询中找到的MATCH (n:person)-->(m:movie) WHERE m.Title in $mycollection RETURN n.name, count(*); 模式,因为该语法([watched]前没有冒号)根本不进行过滤。它将关系仅分配给名为watched的变量,但没有使用该变量,因此是多余的。

如果您打算使用watched作为关系类型,请执行以下操作:

watched

此修改后的查询返回每个人观看标题为MATCH (n:person)-[:watched]->(m:movie) WHERE m.Title in $mycollection RETURN n.name, count(*); 的电影的次数