2 Stimmen

Gewinnung einer numerischen/normalisierten Darstellung von Zeichenketten zur Unterstützung einer "natürlichen Sortierung" von Titeln in der DB

Ich möchte eine zusätzliche Spalte in einer Tabelle als "Sortierwert" speichern, die eine numerische Darstellung der Titelspalte ist, so dass die Reihenfolge dieser Werte die natürliche alphabetische Sortierreihenfolge der Zeichenfolge darstellt. Wenn ich eine neue Zeile einfüge, kann ich den numerischen Wert generieren und weiß, dass dieser Wert im Verhältnis zu anderen die Position der Zeichenkette bei einer alphabetischen Suche darstellt, und zwar auf die ersten X Buchstaben genau.

Dafür gibt es mehrere Gründe: Erstens möchte ich eine natürlichere Reihenfolge als die von einem DB-Server angebotene einfache Reihenfolge, bei der Dinge wie "Der" und "A" und Satzzeichen am Anfang ignoriert und Zahlen "natürlich" behandelt werden.

Zweitens ist dies für einen Index mit vielen Permutationen - es spart Platz und vielleicht Zeit, wenn ein Index mit vielen Zeilen durchlaufen wird.

Was ich suche, ist der Algorithmus zur Umwandlung der Zeichenkette in den numerischen Wert, oder, wie ich annehme, ein normalisierter Zeichenkettenwert.

Ich verwende PHP und MySQL.

Ich fürchte, dass "alles aus der DB ziehen und in PHP mit natcasesort() sortieren" keine Lösung für diese spezielle Situation ist, da ich Zeilen (mit order by und group by) in sortierter Reihenfolge abrufen möchte, bevor sie zu einer Join- oder Limit-Klausel gelangen. Vielen Dank!

Bearbeiten:

Vielen Dank für die bisherigen Antworten. Es ist mir gerade aufgefallen, dass die Tatsache, dass meine Anwendung UTF-8 verwendet, ziemlich relevant ist. Mit dieser sagte, ich denke, die Praktikabilität der Darstellung der ersten Teil einer Zeichenfolge in einem gepackten / numerische Form ist eine Strecke, vielleicht nur eine Art von normalisierten Form (alles Groß-und Kleinschreibung, Zahlen Null-gefüllt, und so viele Zeichen wie möglich normalisiert, um ihre Root dh ã bis a) wäre angemessen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X