phpbar.de logo

Mailinglisten-Archive

[php] Re: Re: [php] Mehrsprachigkeit PHP&MySQL

[php] Re: Re: [php] Mehrsprachigkeit PHP&MySQL

Peter Holm PHolm_(at)_gmx.de
Sat, 17 Jun 2000 18:41:37 +0200


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