htmlzeichen sortieren
am 30.12.2005 16:44:42 von bernd wayne
hallo.
ich habe folgendes Problem ich möchte gerne eine Tabelle sortiert
ausgeben aber habe leider auch HtmlSonderzeichen als ersten Char darin
stehen.
nun schaut die Sortierung natürlich ca so aus:
Ł
A
B
.....
gibt es eine Möglichkeit das ich zb beim SELECT Statement sage das er
mir für Ł das so behandelt wie ein A (von der sortierung)
Es gibt nur 15 solcher Sonderzeichen darum denke ich wäre das eine gute
Möglichkeit, wenn es geht.
Vielleicht gibts noch eine bessere Lösung, bin gespannt.
(System: MySQL 4.0.24, Die Anwendung -> PHP)
danke lg bernd
Re: htmlzeichen sortieren
am 30.12.2005 16:57:52 von Kai Ruhnau
bernd wayne wrote:
> ich habe folgendes Problem ich möchte gerne eine Tabelle sortiert
> ausgeben aber habe leider auch HtmlSonderzeichen als ersten Char darin
> stehen.
>
> nun schaut die Sortierung natürlich ca so aus:
>
> Ł
> A
> B
> ....
>
> gibt es eine Möglichkeit das ich zb beim SELECT Statement sage das er
> mir für Ł das so behandelt wie ein A (von der sortierung)
> Es gibt nur 15 solcher Sonderzeichen darum denke ich wäre das eine gute
> Möglichkeit, wenn es geht.
>
> Vielleicht gibts noch eine bessere Lösung, bin gespannt.
Die einzige Lösung für dieses Problem besteht darin, die Datenbank zur
Speicherung von Daten und nicht von Ausgabeformaten zu verwenden:
Schreibe dir ein Skript, dass dir deine Inhalte von überflüssigem
HTML-Zeugs bereinigt und Entities in die Real-Zeichen auflöst. Diese
Rohdaten speicherst du so in der Datenbank. Anschließend baust du dir
deine Ausgabe so um, dass im Falle von HTML die nötigen
Entitätsersetzungen wieder vorgenommen werden.
Grüße
Kai
--
This signature is left as an exercise for the reader.
Re: htmlzeichen sortieren
am 30.12.2005 16:59:42 von Michael Konietzka
bernd wayne wrote:
> hallo.
>
> ich habe folgendes Problem ich möchte gerne eine Tabelle sortiert
> ausgeben aber habe leider auch HtmlSonderzeichen als ersten Char darin
> stehen.
>
> nun schaut die Sortierung natürlich ca so aus:
>
> Ł
> A
> B
> ....
>
> gibt es eine Möglichkeit das ich zb beim SELECT Statement sage das er
> mir für Ł das so behandelt wie ein A (von der sortierung)
> Es gibt nur 15 solcher Sonderzeichen darum denke ich wäre das eine gute
> Möglichkeit, wenn es geht.
>
> Vielleicht gibts noch eine bessere Lösung, bin gespannt.
>
> (System: MySQL 4.0.24, Die Anwendung -> PHP)
Ersetze die Sonderzeichen vorm Eintragen in DB durch den
entsprechenden Character. PHP sollte wohl entsprechende Funktionen
anbieten. Dann hast du "Å" statt Ł in der Tabelle stehen,
vorrausgesetzt dein Tabelle ist mit dem passende Charset deklariert.
Dann noch die "collation" nachschauen und das "order by" funktioniert
plötzlich. ;-)
GrüÃe
Michael
Re: htmlzeichen sortieren
am 30.12.2005 17:02:03 von Sven Paulus
bernd wayne wrote:
> Vielleicht gibts noch eine bessere Lösung, bin gespannt.
> (System: MySQL 4.0.24, Die Anwendung -> PHP)
Mach's auf Applikationsebene. Dort kannst Du ja z.B. in PHP mit
usort() (oder in C mit qsort oder in Perl mit sort etc.) eigene
Vergleichsfunktionen definieren, bei denen Du eben dann die
HTML-Entities zuerst zu ihren Aequivalenz-Zeichen wandelst und dann
einen normalen Stringvergleich machst.
Fuer MySQL faellt mir da spontan nichts ein. Eine eigene Collation
dafuer dazuzubauen duerfte aufwaendig sein.
Re: htmlzeichen sortieren
am 30.12.2005 17:26:50 von Axel Schwenke
Michael Konietzka wrote:
> bernd wayne wrote:
>>
>> (System: MySQL 4.0.24, Die Anwendung -> PHP)
>
> Ersetze die Sonderzeichen vorm Eintragen in DB durch den
> entsprechenden Character.
....
> Dann noch die "collation" nachschauen und das "order by" funktioniert
> plötzlich. ;-)
Im Prinzip schon. Nur müßte er dazu auf 4.1.x aufrüsten.
In 4.0.x gibts weder Collations noch multibyte-Zeichensätze.
XL
Re: htmlzeichen sortieren
am 30.12.2005 17:42:35 von bernd wayne
Sven Paulus wrote:
> bernd wayne wrote:
>> Vielleicht gibts noch eine bessere Lösung, bin gespannt.
>> (System: MySQL 4.0.24, Die Anwendung -> PHP)
>
> Mach's auf Applikationsebene. Dort kannst Du ja z.B. in PHP mit
> usort() (oder in C mit qsort oder in Perl mit sort etc.) eigene
> Vergleichsfunktionen definieren, bei denen Du eben dann die
> HTML-Entities zuerst zu ihren Aequivalenz-Zeichen wandelst und dann
> einen normalen Stringvergleich machst.
>
ok danke
wahrscheinlich wird es wirklich am besten auf Applikationsebene am
besten sein, ist halt schade weil ich eigentlich lieber mySql arbeiten
lasse als den apache/php.
> Fuer MySQL faellt mir da spontan nichts ein. Eine eigene Collation
> dafuer dazuzubauen duerfte aufwaendig sein.
>
Re: htmlzeichen sortieren
am 30.12.2005 17:59:39 von Michael Konietzka
Axel Schwenke wrote:
> Michael Konietzka wrote:
>
>>bernd wayne wrote:
>>
>>>(System: MySQL 4.0.24, Die Anwendung -> PHP)
>>
>>Ersetze die Sonderzeichen vorm Eintragen in DB durch den
>>entsprechenden Character.
>
> ...
>
>
>>Dann noch die "collation" nachschauen und das "order by" funktioniert
>>plötzlich. ;-)
>
>
> Im Prinzip schon. Nur müßte er dazu auf 4.1.x aufrüsten.
> In 4.0.x gibts weder Collations noch multibyte-Zeichensätze.
Stimmt, da war doch was.
;-)
Re: htmlzeichen sortieren
am 30.12.2005 23:16:19 von Martin Schneider
Hi Bernd,
> gibt es eine Möglichkeit das ich zb beim SELECT Statement sage das er
> mir für Ł das so behandelt wie ein A (von der sortierung)
> Es gibt nur 15 solcher Sonderzeichen darum denke ich wäre das eine gute
> Möglichkeit, wenn es geht.
wenn Du wirklich nur 15 Sonderzeichen hast, kommt evtl. sowas in Frage:
SELECT zeichen FROM table ORDER by zeichen IN ('Ł', '{', [usw])
Dann wird zeichen zuerst nach allem sortiert, was in dem IN steht, und
danach dann normal alphabetisch.
Grüße
Martin
Re: htmlzeichen sortieren
am 03.01.2006 01:32:48 von bernd wayne
Martin Schneider wrote:
> Hi Bernd,
>
>> gibt es eine Möglichkeit das ich zb beim SELECT Statement sage das er
>> mir für Ł das so behandelt wie ein A (von der sortierung)
>> Es gibt nur 15 solcher Sonderzeichen darum denke ich wäre das eine gute
>> Möglichkeit, wenn es geht.
>
> wenn Du wirklich nur 15 Sonderzeichen hast, kommt evtl. sowas in Frage:
> SELECT zeichen FROM table ORDER by zeichen IN ('Ł', '{', [usw])
>
> Dann wird zeichen zuerst nach allem sortiert, was in dem IN steht, und
> danach dann normal alphabetisch.
>
> Grüße
>
> Martin
>
danke Martin genausowas hab ich gesucht :)
Re: htmlzeichen sortieren
am 03.01.2006 10:34:40 von Hartmut Holzgraefe
Martin Schneider wrote:
> wenn Du wirklich nur 15 Sonderzeichen hast, kommt evtl. sowas in Frage:=
> SELECT zeichen FROM table ORDER by zeichen IN ('Ł', '{', [usw=
])
>=20
> Dann wird zeichen zuerst nach allem sortiert, was in dem IN steht, und =
> danach dann normal alphabetisch.
vollständig dann also so: ?
SELECT zeichen
FROM table
ORDER BY zeichen IN ('Ł', '{', [usw])
, zeichen
Damit landen dann aber die Sonderzeichen einfach nur am Ende der
Liste, nicht jedoch eingefügt an bestimmten Positionen wie ursprüngli=
ch
gewünscht:
CREATE TABLE foo(c CHAR);
INSERT INTO foo VALUES('a'),('b'),('c'),('d'),('e'),('g'),('f');
SELECT c FROM foo ORDER BY c IN ('d','c'), c;
+------+
| c |
+------+
| a |
| b |
| e |
| f |
| g |
| c |
| d |
+------+
die Elemente aus "IN ('d','c') erscheinen so am Ende der Liste
und selbst auch wieder in alphabetischer Reihenfolge und nicht wie
in der IN-Liste spezifiziert ...
--=20
Hartmut Holzgraefe, Senior Support Engineer .
MySQL AB, www.mysql.com
http://www.mysql.com/support/
Re: htmlzeichen sortieren
am 03.01.2006 12:23:15 von Martin Schneider
> CREATE TABLE foo(c CHAR);
>
> INSERT INTO foo VALUES('a'),('b'),('c'),('d'),('e'),('g'),('f');
>
> SELECT c FROM foo ORDER BY c IN ('d','c'), c;
>
> +------+
> | c |
> +------+
> | a |
> | b |
> | e |
> | f |
> | g |
> | c |
> | d |
> +------+
>
> die Elemente aus "IN ('d','c') erscheinen so am Ende der Liste
> und selbst auch wieder in alphabetischer Reihenfolge und nicht wie
> in der IN-Liste spezifiziert ...
Right, meine Lösung war nicht vollständig.
Nunja, die Liste "rumdrehen" kann man ja mit DESC, und damit auch
innerhalb des INs sortiert wird, muß man wohl für jede Möglichkeit
sortieren, also:
SELECT c FROM foo ORDER BY c IN ('d') DESC, c IN ('c') DESC, c;
+------+
| c |
+------+
| d |
| c |
| a |
| b |
| e |
| f |
| g |
+------+
Oder habe ich noch was übersehen? Zugegebenermaßen nicht schön, wenn
viele Werte in der Liste sind. Evtl. hat jemand eine elegantere Lösung?!
Grüße
Martin
Re: htmlzeichen sortieren
am 03.01.2006 12:35:18 von Dominik Echterbruch
Martin Schneider wrote:
[Sortierung mit IN()]
> Oder habe ich noch was übersehen? Zugegebenermaßen nicht schön, wenn
> viele Werte in der Liste sind. Evtl. hat jemand eine elegantere Lösung?!
Die einzig sinnvolle und damit eleganteste Lösung hat Kai ja bereits
letztes Jahr gepostet. Leider fand sie keinerlei Anklang...
Grüße,
Dominik
--
MonstersGame - Die Schlacht zwischen Vampiren und Werwölfen
http://spielwelt6.monstersgame.net/?ac=vid&vid=3018786
Re: htmlzeichen sortieren
am 03.01.2006 12:37:39 von Martin Schneider
> Oder habe ich noch was übersehen? Zugegebenermaßen nicht schön, wenn
> viele Werte in der Liste sind. Evtl. hat jemand eine elegantere Lösung?!
Hm, neuer Vorschlag:
SELECT c FROM foo ORDER BY FIND_IN_SET(c, 'd,f,c') DESC, c;
+------+
| c |
+------+
| c |
| f |
| d |
| a |
| b |
| e |
| g |
+------+
Allerdings muß man dann in dem Set die Daten "rückwärts" eingeben ("dfc"
wird sortiert nach "cfd")
Grüße
Martin
Re: htmlzeichen sortieren
am 04.01.2006 08:48:50 von Hartmut Holzgraefe
bernd wayne wrote:
> gibt es eine Möglichkeit das ich zb beim SELECT Statement sage das er=
> mir für Ł das so behandelt wie ein A (von der sortierung)
> Es gibt nur 15 solcher Sonderzeichen darum denke ich wäre das eine gu=
te
> Möglichkeit, wenn es geht.
>=20
> Vielleicht gibts noch eine bessere Lösung, bin gespannt.
>=20
> (System: MySQL 4.0.24, Die Anwendung -> PHP)
Ist die Ergebnismenge deiner SELECT Statements sehr groß?
Wenn nicht dann ist es vermutlich günstiger diese in der Applikation
und nicht in der Datenbank zu sortieren. Mit Hilfe der PHP Funktion
usort() ( http://php.net/usort ) hast du dann die Möglickeit eine
maßgeschneiderte Vergleichsfunktion zur Sortierung zu spezifizieren
in der du die Sortierreihenfolge der einzelnen Zeichen geziehlt
selbst festlegen kannst.
--=20
Hartmut Holzgraefe, Senior Support Engineer .
MySQL AB, www.mysql.com
http://www.mysql.com/support/