Mailinglisten-Archive |
Hallo Herr Streicher (und alle, die es interessiert), >nach dem a (ou) in der sortierung auftauchen (wie im telefonbuch) , die datenbanken >sortieren jedoch nach den ascii werten und da sind die sonderzeichen sehr weit hinten >angefügt das laesst sich jedoch durch die einfuehrung eines sortierfeldes einfach loesen leider bin ich kein Informatiker und wäre froh, wenn Sie mir einen Link / Hinweis auf ein Tutorium oder Buch geben könnten, in dem die Umsetzung eines von Ihnen erwähnten Sortierfeldes beispielhaft dargestellt wird. Ist so etwas nicht extrem aufwändig? Mir erscheint die Umsetzung gerade bei umfangreichen Datenmengen nicht nebensächlich. Zur Vorgehensweise: Es fällt erstmal alles weg, was die flüssige Darstellung mittels while-loop nicht mehr ermöglicht. Wir können also nicht hinterher irgendwas sortieren, sondern müssen den order by der Datenbank austricksen. Den Begriff "Sortierfeld" könnte man als ein zusätzliches Feld in der DB auffassen. Denkbar wäre hier: 1. Austauschen der Umlaute durch Vokal-Kombination vor dem INSERT 2. Markierung in DB einfügen (Flag) 3. Beim SELECT auf Flag prüfen und Original-Umlaut(e) wieder herstellen. Klingt zunächst ganz gut, aber auch hier wird die Ausgabe etwas verzögert, was bei grossen Datenmengen spürbar wird. Zweitens kann man, bei vorhandenem Flag, nicht wild _alle_ Kombinationen von ae, ue, oe durch Umlaute im String ersetzen, da es möglicherweise etwas anderes ergibt, als der User eingegeben hat; das merkt man insbesondere bei langen Listen von internationalen Namen. Da man sich also merken muss, welcher Teil des Strings ersetzt werden soll, kann man auch gleich den Originalstring in einem zusätzlichen Feld abspeichern und die Version mit ersetzten Umlauten zum Order by benutzen. Das sähe dann so aus: Text1 char(255) Text-X char(255) Text1 enthält den Text mit ersetzten Umlauten, Text-X den Originalstring. Nach einem SELECT Text1, Text-X ORDER BY Text1 gibt man dann bei Vorhandensein anstelle von Text1 den Text-X aus, also ca. echo ($Text-X ? $Text-X : $Text1). Auf die Art kann man seine order by-selects in die richtige Reihenfolge bekommen. Man hat allerdings den Overhead eines Vergleiches je Feld und Reihe und die doppelte Datenmenge für alle Strings mit Umlauten. Noch umständlicher wird es bei der Suche nach Begriffen mit Umlauten, erst recht, wenn man dynamisch SQL-Abfragen generiert, die dann nur wg. Umlauten umgebaut werden müssen. Das geht zwar alles, aber es wäre natürlich viel besser, wenn man der Datenbank das richtige Sortieren beibringen könnte... mich wundert, dass bei der weiten Verbreitung auch im deutschsprachigen Raum eine Anpassung von z.B. MySQL noch nicht stattgefunden hat. Vielleicht können Sie mir einen weiteren Weg aufweisen, wie man dieses Problem effizient mit PHP umgehen kann? Wäre sicherlich auch für die vielen Benutzer dieser DB interessant. Was genau meinten Sie mit Sortierfeldern? Und btw: Wie sieht das eigentlich bei Postgres, Interbase, Oracle, Sybase etc. aus? Hat das schon mal jemand getestet? Have a nice thread, Peter
php::bar PHP Wiki - Listenarchive