STrojette
Returning Observer

Datenbank Query - spezielle Sortierung möglich?

Und erneut hallo zusammen!

ich habe folgendes "Problem" und frage mich ob es dazu eine einfache Lösung gibt:

Wir haben eine Datenquelle mit Fachbegriffen des Kunden. Diese sollen alphabetisch ausgegeben werden, soweit so gut.

Nun soll jedoch ein Begriff (der Markenname) komplett kleingeschrieben werden. Dadurch würde dieser immer ans Ende der Liste rutschen.

Gibt es einen (einfachen) Weg den Begriff entweder wie mit Großbuchstabe einzusortieren (also alphabetisch case-insensitve) oder etwa immer an erste Stelle der Liste zu setzen?

Vielen Dank und eine schöne Woche!

- Sam

0 Kudos
5 Replies
robin_kump
I'm new here

Hallo Sam,

wir standen vor einiger Zeit vor einem ähnlichen Problem und haben das bei der Ausgabe eines contentSelects über einen Abbildungs-Ausdrucke (Lambda-Ausdruck) gelöst:

$CMS_FOR(st_for_entry, st_fr_contentSelect.copy.sort(x -> x.name.toLowerCase().replaceAll("ä","a").replaceAll("ö","o").replaceAll("ü","u")))$

    $-- Ausgabe --$

$CMS_END_FOR$

Viele Grüße

Robin

0 Kudos

Hallo Sam,

bei Robins Ansatz muss man etwas vorsichtig sein, das ist zwar recht schnell gemacht und kann bei wenigen Datensätze passen (aus dem Bauch heraus würde ich mal sagen zweistelliger bis unterer dreistelliger Bereich). Damit werden die Datensätze nämlich erstmal alle in den Speicher geladen und vor allem zumindest während der Schleife auch gehalten.

Man kann die "case-Sensitivity" hier soweit ich weiß bei der Abfrage selber nicht beeinflussen. Mir fallen hier - außer Robins Vorschlag - noch spontan folgende Varianten ein:

  • Eine zweite Spalte, nach der sortiert wird. Diese könnte manuell vom Redakteur befüllt werden und/oder auch von einem minimalen ValueService im Formular - initial einmal für die bereits gepflegten Daten per Skript. Das hätte gleich den Vorteil, dass man das auch für andere Begriffe nutzen könnte (Der/Die/Das ignorieren usw.)
  • Wenn es wirklich nur um einen oder wenige Begriff geht, könntet ihr hierzu einfach eine separate Abfrage machen und die bei der Generierung der anderen (=zahlenmäßig überwiegenden) Begriffe dann "reinschummeln" (quasi eine Art Mergesort).

Die erste Variante wäre flexibler und konzeptuell "sauber", die zweite ist irgendwie ein bisschen "gemogelt" 😉

Viele Grüße

Michael

0 Kudos
feddersen
Community Manager

Je nachdem welche Datenbank ihr verwendet, solltet ihr einfach die Collation von case-sensitive auf case-insensitive stellen können.

0 Kudos
pavone
I'm new here

Hallo Sam,

benötigst Du noch weitere Hilfe oder haben Dir die Antworten von Robin, Michael und Christoph bereits geholfen? In diesem Fall wäre es super, wenn Du die "richtige Antwort" entsprechend markierst, damit auch andere Community-Teilnehmer diese auf den ersten Blick finden. Solltest Du zwischenzeitlich eine eigene Lösung

gefunden haben, wäre es nett, wenn Du diese hier bereitstellst.

Viele Grüße

Tim

0 Kudos
STrojette
Returning Observer

Hallo nochmal und vielen Dank allen Antwortenden!

Der Kunde hat sich kurzer Hand dazu entschieden den Begriff dann doch einfach Groß zu schreiben, das Thema hat sich also quasi vom Liegenbleiben erledigt.

Wir arbeiten hier mit Legacy Code anderer Firmen, ist also nicht immer alles so ideal gebaut wie es hätte sein können.

Welche Lösung hier nun die "richtige" ist, kann ich also leider nicht sagen.

Dennoch nochmals vielen Dank an euch alle!

0 Kudos