Mailinglist Archive: opensuse-de (5184 mails)

< Previous Next >
Re: Deutsche Sortierung mit mysql
  • From: David Haller <david@xxxxxxxxxx>
  • Date: Tue, 21 Oct 2003 00:09:09 +0200
  • Message-id: <20031020220909.GA12703@xxxxxxxxxxxxxxxxxx>
Hallo,

Am Mon, 20 Oct 2003, Al Bogner schrieb:
>Am Montag, 20. Oktober 2003 21:35 schrieb David Haller:
>> Am Mon, 20 Oct 2003, Al Bogner schrieb:
>> >Das einzige was mich noch stört, ist, dass die Sortierung zuerst
>> >Großbuchstaben sortiert.
>>
>> Hm. Komisch. Bei mir passiert genau das nicht...
>
>David, zitierst du bitte mal genau aus deiner my.cnf. Dann probiere ich das
>mit copy&paste.

Wird kaum klappen, "character_set{,s}" gibt's bei mir offenbar nicht.

In der /etc/my.cnf hab ich gar nix zu language/charset, in der
~/.my.cnf eh nur "host", "port" und "socket".

Interessant ist aber die Syntax, wie Variablen gesetzt werden, z.B.:

set-variable = key_buffer=16M

d.h. bei "set-variable = " duerfte whitespace irrelevant sein, dann
bei "varname=wert" darf wohl keiner mehr auftauchen...

>> $ mysqladmin -p variables
>>
>> | language | /usr/share/mysql/english/ |
>> | version | 3.22.32 |
>>
>> [..]
>
>Bei mir gibt das auszugsweise:
>
>| character_set | german1
>
> |
>| character_sets | latin1 big5 czech euc_kr gb2312 gbk sjis
>tis
>620 ujis dec8 dos german1 hp8 koi8_ru latin2 swe7 usa7 cp1251 danish hebrew
>win1
>251 estonia hungarian koi8_ukr win1251ukr greek win1250 croat cp1257 latin5 |
>
>| version | 3.23.55-Max-log
>
>Da gibt es also character_set und character_sets

Hm. Das muesste dann z.B.

set-variable = character_set=latin1

sein. Mein mysql ist halt schon ordentlich abgehangen
$ rpm -q --queryformat "%{buildtime:date}\n" mysql
Fri 24 Mar 2000 10:45:07 PM CET
und kennt die character_set Optionen wohl noch nicht. "language"
bezieht sich ausserdem nur auf Fehlermeldungen...

Wozu willst du eigentlich sortieren? Muss das "innerhalb" von mysql
passieren? Sonst koenntest du die Daten in ne Datei (csv)
rausschreiben, mit 'sort' und nem bel. LC_COLLATE sortieren und
dann wieder importieren...

>> Du kannst mit CONCAT eine beliebig lange Liste von Komma-getrennten
>> Feldern, Strings und sonstwas aneinanderfuegen. Und das ganze
>> uebersichtlicher schreiben...
>
>Ich muß mir deine Version erstmal ansehen, ob die wirklich das macht,
>was ich möchte.

Ja, muesste aber eigentlich ;)

>An und für sich weiß ich, dass man mit concat mehrere Teile
>zusammenfügen kann, nur wenn an einen Teil eine Bedingung geknüpft ist, wo
>wieder etwas zusammenzufügen ist, dann kommt man IMO daran nicht
>herum.

Jep, z.B. "innerhalb" von ifs, da darf halt das "then" und "else" jew.
nur "ein" Block sein, und deswegen braucht man dort dann ein "inneres"
concat(), im concat ist's nur ne Komma-getrennte Liste...

Also, als einfaches Beispiel:

concat( "a", "b", "c",
if( foo > 0, "DUH!", "d" ),
"e", "f", "g"
)

concat( "a",
if( LENTGH(bar) > 0,
bar,
concat( foo, "-", bar, "!" ),
),
"c", "d",
baz,
"e",
fubar,
"f"
)

Das "if ( COND, THEN, ELSE )" expandiert fuer's concat eben zu einem
"token" und das "concat" fuer's "if" ebenso... Auf mehr muss man in
der Beziehung nicht achten.

Bei "concat" ist die Syntax also:

CONCAT ( TOKENLIST )
mit
TOKENLIST := TOKEN | TOKEN "," TOKENLIST

und "TOKEN" kann ein komplettes if( ... ) sein, ein weiteres concat,
oder ein "Stringliteral", ein Spaltenname, oder...

>Kann
>aber durchaus sein, dass sich im Laufe der einzelnen Tests, einige concats
>zuviel ergeben haben.

Ja ;)

>Ich hatte das auch ähnlich wie du gegliedert und dann am Schluß alles in
>wenige Zeilen gepackt um es leichter deaktivieren zu können.

*g* Da verwende ich einfach ein 'M-x comment-region'...

>> Ich hoffe mal, ich hab's richtig hinbekommen ;)
>
>Das ist gar nicht entscheidend. Wichtig sind die Tips, wie du so was angehst
>und so weit lag ich gar nicht daneben. Am Mac war so was auch nicht gerade
>kompakt zu formulieren, aber doch übersichtlicher.

Wobei ich dazu sagen musst, dass ich mich mit SQL eigentlich auch
nicht gut auskenne... Nur hab ich wohl ein Talent, durch solche
"Syntaxen" (und Gebrauchsanleitungen ;) etc. durchzusteigen und dann
uebertrage ich gerne von andrens Sachen ("Programmiersprachen")
Dinge/Konzepte usw. ;)

>Ist so was mit postgresql einfacher zu formulieren oder ändert sich da wenig,
>da ja beides SQL-Dialekte sind?

Keine Ahnung, leider -- PostgreSQL will ich mir auch demnaechst
irgendwann mal anschauen, das mit den stored procedures wuerde mich
schon reizen. Ansonsten: die SQL-Dialekte sind AFAIK weitgehend
aehnlich, mysql hat ein paar Spezialitaeten und einige Luecken,
PostgreSQL andere (und weniger Luecken)...

>Den Tipp mit den Kommentaren in der Syntax finde ich gut.

*g*

>> Wenn du nachzaehlst, siehst du, dass ein Haufen 'concat' rausgeflogen
>> sind ;) Merkregel: ein 'concat ( concat ( ... ) )' ist ueberfluessig.
>
>Ja klar, siehe oben.
>
>Und bevor ich wieder ewig suche: Kann mir bitte jemand einen Hinweis geben,
>wie ich ein bestimmtes Feld in einer Selektion mit einer Sequenz fülle. Also
>ich möchte zB ein Feld mit allen Münchner-Adressen, nach Name "indiziert" mit
>einer laufenden Nummer, beginnend mit 1, füllen. Der Schwerpunkt der Syntax
>liegt in der Sequenz.

Ouh. Keine Ahnung... AUTOINCREMENT?

Ich wuerde wohl awk dahinterschalten ;) Das mit "7.2 User Variables"
klappt hier garnet...

-dnh, schoene sig, gell?

--
'Tell me, what is happiness?'
'Happiness? Happiness... is to wake up, on a bright spring morning,
after an exhausting first night spent with a beautiful... passionate...
multi-murderess.' -- Use of Weapons, Prologue, by Iain M. Banks

< Previous Next >