【发布时间】:2018-05-23 06:19:22
【问题描述】:
我有一个具有这种模式的 neo4j 数据库 (:User)-[:ANSWER_TO_QUESTION]->(:Question)。
在我的应用程序中有一些问题和一些用户节点。用户将回答问题,而答案将保存用户与问题之间的关系。
用户可以跳过问题,答案将保存 null 与问题的关系。
每个问题都有一个回答周期时间,如果用户回答了问题,则重新提出问题;如果用户没有回答问题,则重新提出问题的无回答周期时间。
现在我想查询特殊用户未提出或未回答且已通过无回答周期或已回答且已通过回答周期的问题。按问题的优先级排序,然后返回一个问题。
我尝试使用联合查询,但我无法返回总结果的限制 1。所以查询将返回 3 个问题,每个联合查询一个。
MATCH (n:Users {user_name:$user_name}),(q:Questions)
Where NOT (n)-[:ANSWERED_OF_QUESTION]->(q)
return q as question
ORDER BY question.priority DESC
LIMIT 1
UNION MATCH (n:Users {user_name:$user_name})-[r:ANSWERED_OF_QUESTION]->(q:Questions)
Where r.answer is null and r.created+q.no_answer_cycle < $now_time
RETURN q as question
ORDER BY question.priority DESC
LIMIT 1
UNION MATCH (n:Users {user_name:$user_name})-[r:ANSWERED_OF_QUESTION]->(q:Questions
Where r.answer is not null and r.created+q.answer_cycle < $now_time
RETURN q as question
ORDER BY question.priority DESC
LIMIT 1
我尝试了 OPTIONAL MATCH 和 CASE,但没有得到我的结果。有什么帮助吗?
【问题讨论】: