Ich habe folgendes Datenmodell:Cypher Abfrage mit ORDER BY auf Übersetzung mit dem Rückfall
- Knoten Entität
BusinessObject
- Knoten Entität
Translation
enthaltend einlanguage
und einetext
Eigenschaft - Beziehung
TRANSLATES
von Übersetzung des Geschäftsobjekt, möglicherweise mehrere
Die Übersetzungen allo Ich möchte Texte präsentieren, die der Sprache des Benutzers entsprechen. Ein Benutzer kann beispielsweise Deutsch lesen, ein Geschäftsobjekt wird in Englisch und Deutsch übersetzt, und auf der Benutzeroberfläche wird Deutsch angezeigt. Im Allgemeinen gibt es einen Rückfall von der Sprache des Benutzers zu einer Standardsprache (Englisch).
Jetzt möchte ich für alle BusinessObject
s abfragen und sie nach der Übersetzung bestellen, die den Fallback enthalten sollte. Ist das mit der Chiffre überhaupt möglich?
EDIT: Beispiel
Businessobject A mit Übersetzungen ("en", "XYZ Übersetzung für A") und ("de", "Deutsche Übersetzung für A").
BusinessObject B mit Übersetzungen ("en", "Einige englische Übersetzung für B") und ("fr", "Traduction français pour B").
Ein Benutzer U1 hat Sprache Deutsch ("de") und der Fallback sollte Englisch ("en") sein. Die Abfrage von Geschäftsobjekten sollte daher zu einer Liste [A, B] führen, da die Übersetzung "Deutsch ... für A" vor "Some En ... for B" lexikografisch bei der aufsteigenden Sortierung steht. Wenn andererseits ein zweiter Benutzer U2 Sprache Französisch hat, sollte das Ergebnis [B, A] sein, weil "Traduc ... pour B" vor "XYZ Eng ... for A" steht. Ein dritter englischer Benutzer U3 sollte das Ergebnis [B, A] erhalten, weil die Übersetzung "Einige ... für B" vor "XYZ ... für A" steht.
Also ich brauche wirklich die Bestellung von der Datenbank getan, wenn das möglich ist.
EDIT: Lösung
Mit den großen Ideen aus den Antworten, kam ich auf die folgende Abfrage auf:
MATCH (r:BusinessObject)
WITH r
OPTIONAL MATCH (r)<-[TRANSLATES]-(t:Translation)
WHERE t.language = 'de' // user language
WITH r, t.text as t1
OPTIONAL MATCH (r)<-[TRANSLATES]-(t:Translation)
WHERE t.language = 'en' // fallback
WITH r, coalesce(t1, t.text) as sort
RETURN DISTINCT r ORDER BY sort;
Sicherlich hat dies nicht die beste Leistung, aber das ist für mich ok. Danke an alle Mitwirkenden!
Können Sie Eingaben teilen und ein Beispiel für die gewünschte Ausgabe und jeden Versuch, den Sie bisher bei einer Abfrage gemacht haben? – InverseFalcon