Ich mache ein Schulprojekt mit Neo4j und habe ein Problem festgestellt. Ich möchte alle Studenten, die sich angemeldet haben, um eine Prüfung abzulegen und eine Prüfung ablegen oder sich für sie anmelden, mit ihrer ID oder Indexnummer. Ich habe Studenten und Fächer mit Prüfungen verbunden, die Beziehungen zu Eigenschaften (STUDENT) - [EXAM] - (SUBJECT) und/oder (STUDENT) - [REGISTRATION] - (EXAM) sind. Ich brauche 1 Student nach ID, alle Verbindungen des Studenten zu Themen in 1 Abfrage. Die Datenbank sieht wie folgt aus:Neo4j multiple Beziehung Abfrage
MERGE (std5:STUDENT { name:'Nola', surname:'Joan', indexnumber:12000, semester:'I' })
MERGE (std4:STUDENT { name:'Pola', surname:'Moan', indexnumber:12001, semester:'II' })
MERGE (sub1:SUBJECT { name:'Databases', semester:'VII' })
MERGE (sub2:SUBJECT { name:'Advanced Databases', semester:'VIII' })
MERGE (std5) - [ :EXAM { signed:' ' , mark:6 , date:'12.01.2017.' }] -> (sub1)//mark 6 is passing
MERGE (std4) - [ :EXAM { signed:' ' , mark:5 , date:'12.01.2017.' }] -> (sub1)
MERGE (std5) - [ :REGISTRATION {date:"2/11/2015", charge:0, term:'June'}] -> (sub1)
MERGE (std5) - [ :REGISTRATION {date:"2/11/2016", charge:0, term:'June'}] -> (sub1)
MERGE (std4) - [ :REGISTRATION {date:"2/11/2015", charge:0, term:'June'}] -> (sub2)
Die Abfrage, die ich verwendet, um dieses eine, sondern gibt mir die Daten doppelt und oft ist es falsch. Ich benötige für einen bestimmten Studenten alle Prüfungen und Anmeldungen für jede dieser Prüfungen, damit ich eine vollständige Liste der Personen bekommen kann, die eine Prüfung abgelegt oder bestanden haben, sich registriert haben oder sich nie angemeldet und eine Prüfung abgelegt haben.
OPTIONAL MATCH (p:STUDENT) - [d:EXAM] - (c:SUBJECT)
WHERE p.indexnumber = 12000 and d.mark<5 //failing grade
WITH collect (distinct c) as c1,d
OPTIONAL MATCH (p:STUDENT) - [b11:EXAM] - (c:SUBJECT)
WHERE p.indexnumber = 12000
WITH p , count(c) as rels, collect(b11) as exams,d,collect(distinct c +c1) as c2
RETURN p, c2, d, rels , exams
So zusammenzufassen, Schüler verbunden ist, entweder durch Registrierung oder Prüfung oder beides, ich brauche für für Indexnummer Student sagte, alle diese Beziehungen zu erhalten. Dann alle diese Beziehungen zum Thema zu zählen, da die Daten darüber, wie oft der Schüler die Prüfung abgelegt hat, bei der Beziehungsprüfung zu diesem Thema gespeichert werden. Auch alle Schüler, die die Note < 6 haben, haben die Prüfung nicht bestanden. So halte ich viele Informationen und ich beabsichtige, sie vollständig in Beziehungen zu verwenden. Multiplizieren Sie dies mit der Anzahl der Fächer und Prüfungen, die Komplexität stieg.
Willkommen bei Stack-Überlauf und vielen Dank für Bereitstellen eines Beispieldatensatzes Einige Vorschläge: 1. Bitte fügen Sie der Frage das 'cypher'-Tag hinzu, damit andere es leichter finden, 2. Ihre Daten im Beispiel verwenden eine Mix-Syntax 3. Was ist die Bedingung für das Scheitern der Prüfung? Die Abfrage enthält '<5 ', aber der Text schlägt' <6 'vor. –
1. Ich werde prüfen, wie man Cypher-Tags hinzufügt. 2. In unserem Bewertungssystem sind 6-10 Bestehenszeichen, und wenn jemand versagt hat er seine Markierung auf weniger als 6 gesetzt, 5 ist, wenn er versucht hat, zu bestehen und nicht, niedriger ist für Nichterscheinen oder etwas anderes. 3. Student entweder fehlgeschlagen oder nicht, Beziehung wird im Voraus festgelegt. Ich wollte zum Beispiel herausfinden, welche Fächer für diesen Schüler am härtesten sind, welche Fächer er zu bestehen versuchte usw. und mit all diesen Daten arbeiten. Auch kann ich zum Beispiel sehen, in umgekehrter Abfrage, welche der Fächer Studenten am härtesten finden, etc. Daher die Notwendigkeit, alle Beziehungen zu sehen – xacegod