Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Order by - aufsteigende Zahlenreihe ... (https://www.delphipraxis.net/181250-order-aufsteigende-zahlenreihe.html)

p80286 29. Jul 2014 16:30

AW: Order by - aufsteigende Zahlenreihe ...
 
Wenn das alles nicht hilft, dann füg' doch eine Sortierspalte ein. Da stehen die Daten dann so drin wie deine DB sortieren kann z.B. HP 100 -> HP0100, HP 1000 -> HP1000 usw.

Zitat:

Zitat von baumina (Beitrag 1266948)
Das blöde daran ist, dass keiner weiß wie die morgen ihre Daten eingeben und dann wieder sortiert haben wollen. DENEN leuchtet es natürlich immer ein wie es sein soll, aber meinem Programm halt nicht :(

Da bist Du nicht alleine :mrgreen:

Gruß
K-H

baumina 30. Jul 2014 07:29

AW: Order by - aufsteigende Zahlenreihe ...
 
Zitat:

Zitat von Sir Rufo (Beitrag 1266950)
Achtung, Echo:

Also wenn ich das richtig sehe, dann hast du da einen Präfix, eine Zahl und einen Suffix. Immer so aufgebaut, oder kann das auch anders sein?

Ja, ich denke das mit Präfix, Zahl, Suffix könnte man weiter verfolgen, doch wie findet man den Präfix raus, wenn man weder die Länge noch die Beschaffenheit (ggf. ja auch Zahlen) kennt.

hoika 30. Jul 2014 07:39

AW: Order by - aufsteigende Zahlenreihe ...
 
Hallo,

dann musst du halt lokal sortieren per Code (.Sort -> MyOwnCompare).


Heiko

jobo 30. Jul 2014 09:31

AW: Order by - aufsteigende Zahlenreihe ...
 
Zitat:

Zitat von baumina (Beitrag 1266995)
Zitat:

Zitat von Sir Rufo (Beitrag 1266950)
Achtung, Echo:

Also wenn ich das richtig sehe, dann hast du da einen Präfix, eine Zahl und einen Suffix. Immer so aufgebaut, oder kann das auch anders sein?

Ja, ich denke das mit Präfix, Zahl, Suffix könnte man weiter verfolgen, doch wie findet man den Präfix raus, wenn man weder die Länge noch die Beschaffenheit (ggf. ja auch Zahlen) kennt.

Also irgendwo ist hier schon der Hinweis mit der expliziten Sortierspalte aufgetaucht. Wieso sollen die Anwender das nicht selber eintragen, wenn die Sortier Systematik letztlich verborgen bleibt? Eine 89 % Lösung ist doch nur Angriffsfläche für den Ärger, wenn mal wieder ein Eintrag aus der Reihe tanzt. "..kann nicht mal eine Liste sortieren..." -Sprüche würde ich mir jedenfalls nicht anhören wollen.

Ein systematischer Ansatz wäre m.E. alle Zahlen im String (erlaubte Trennzeichen wären zu definieren ..) per LPAD auf eine definierte, genügend große Länge bringen, z.B. 15 Zeichen oder auch 20, eigentlich egal. Wieder an der Ursprungsstelle in den String setzen und auf dem Ergebnis sortieren.
In FB würde man wohl ein Funktion schreiben müssen, ist vielleicht problematisch ohne RegEx, im Client sollte es kein Problem sein. Aber ist FB eigentlich bei Dir im Einsatz oder beim TE?

Den natural sort Hinweis von Himitsu finde ich auch interessant.

baumina 30. Jul 2014 12:03

AW: Order by - aufsteigende Zahlenreihe ...
 
Zitat:

Zitat von jobo (Beitrag 1267009)
Aber ist FB eigentlich bei Dir im Einsatz oder beim TE?

Bei mir ist mySQL im Einsatz.

jobo 30. Jul 2014 12:28

AW: Order by - aufsteigende Zahlenreihe ...
 
Zitat:

Zitat von baumina (Beitrag 1267030)
Zitat:

Zitat von jobo (Beitrag 1267009)
Aber ist FB eigentlich bei Dir im Einsatz oder beim TE?

Bei mir ist mySQL im Einsatz.

Dann kannst Du vielleicht die UDF mit REGEXP_REPLACE benutzen, um on-the-fly in der SQL Order By Clause einen Sortierausdruck zu erzeugen:
https://github.com/hholzgra/mysql-udf-regexp

sx2008 31. Jul 2014 21:08

AW: Order by - aufsteigende Zahlenreihe ...
 
In Firebird kannst du der Spalte eine Collation mit dem Attribut 'NUMERIC-SORT=1' zuordnen, dann wird so sortiert wie dein Kunde das möchte.
http://www.firebirdsql.org/refdocs/l...collation.html
Ich hab's selber aber nicht getestet.

jobo 1. Aug 2014 06:44

AW: Order by - aufsteigende Zahlenreihe ...
 
Zitat:

Zitat von baumina (Beitrag 1267030)
Zitat:

Zitat von jobo (Beitrag 1267009)
Aber ist FB eigentlich bei Dir im Einsatz oder beim TE?

Bei mir ist mySQL im Einsatz.

Hier ist eine natural sort UDF Implementierung für mySQL
http://stackoverflow.com/a/12257917/384864

Aber Du bist ja schon in Urlaub! :)

nakaramia 11. Aug 2014 15:02

AW: Order by - aufsteigende Zahlenreihe ...
 
Wäre es schneller/ einfacher, den (jeden) Zahlenbereich mit führenden 0 zu erweitern (meinetwegen auf 8 Stellen) und die DB dann mit einer einfachen Sortierung zu betrauen?

himitsu 11. Aug 2014 15:16

AW: Order by - aufsteigende Zahlenreihe ...
 
Wenn das nur einmal pro Datensatz gemacht wird, z.B. als zusätzliche Spalte im SELECT, dann ist es zumindestens nicht sehr viel langsamer.
Aber wenn dann mal einer auf die Idee kommt und eine Zahl mit mehr als 8 Dezimalstellen verwendet, dann geht das natürlich nicht mehr.

Der Bearbeitung und Erstellen des Vergleichstrings ist aber vermutlich/bestimmt etwas langsamer, als eine gut implementierter Vergleichsfunktion.
Als Vergleich:
Delphi-Quellcode:
if s = '123' then
ist schneller als ein
Delphi-Quellcode:
if s = IntToStr(123) then
,
bzw.
Delphi-Quellcode:
if i = 123 then
ist schneller als ein
Delphi-Quellcode:
if IntToStr(i) = '123' then
.

Kommt dann darauf an, wie gut der Sortieralgo ist, also wieviele Vergleiche der benötigt
und wie groß der Unterschied zwischen der ErweitereMitNullen-Funktion ist, gegenüber der zusätzlichen Zeit für eine aufwändigere Vergleichsfunktion.

Wenn die Strings für jeden einzelnen Vergleich so umgewandelt werden (mit Nullen füllen), dann würde das jedenfalls schnell extrem langsam.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:01 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz