Zum Inhalt springen

SQL-Abfrage für Sortierung


murat1895

Empfohlene Beiträge

Hallo Zusammen,

ich habe folgendes Problem ich möchte Artikel Sortiert ausgeben. Die Felder enthalten Text und Zahlen.

Beispiel:

- Holzschraube 10 x 120

- Holzschraube 10 x 13

So würde beispielsweise ein wirres durcheinander bei der Ausgabe erscheinen. Ich möchte dieses allerdings in geordneter  Reihenfolge haben also so:

- Holzschraube 10 x 13

- Holzschraube 10 x 120

Ist das überhaupt möglich mit einer SQL-Abfrage?

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Klar ist das möglich. Die Frage ist ob das ein Problem ist, das man mit SQL angehen sollte.

Ich sehe spontan mehrere Möglichkeiten, zu aller erst musst du die Werte die dir wichtig sind alleine kriegen (damit du darauf sortieren kannst). Das kannst du, wie z.B. Enno schon beschrieben hat machen.

Du könntest diese Daten z.B. auch in eine temporäre Tabelle oder in einen View packen - das bedeutet zwar am Anfang mehr Arbeit.. wird dir aber letztendlich das abfragende Query sehr erleichtern.

Die Alternative ist, dass man sich innerhalb der Applikation alle Daten holt und die split und sortier Logik dann dort implementiert, was wesentlich einfacher sein sollte.

Die eigentliche Lösung ist aber, nicht mit diesen Daten rum zu hantieren sondern dir die Zeit zu nehmen diese Daten ordentlich zu normalisieren. Alleine dass du dir die Frage stellst, is eigentlich ein "smell" dafür, dass die Daten nicht ordentlich normalisiert sind :-)

Bearbeitet von DashDash
Link zu diesem Kommentar
Auf anderen Seiten teilen

Bei dem Beispiel würde doch ein "order by ... desc" reichen?

 

Oder sieht das erweiterte Beispiel (mit unsinnigen Zahlen) so aus:

- Holzschraube 8 x 4

- Holzschraube 8 x 12

- Holzschraube 10 x 8

- Holzschraube 10 x 13

- Holzschraube 10 x 120

- Holzschraube 10 x 130

Dann greifen die Lösungen der Beiden vor mir.

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn man Zahlen in Textfeldern alphabetisch sortiert kommt natürlich sowas raus:

Artikel Größe 1
Artikel Größe 1000
Artikel Größe 111
Artikel Größe 2

Hier könnte man mit Vornullen als Konvention arbeiten, dann wird nach alphabetischer Sortierung sowas draus:

Artikel Größe 0001
Artikel Größe 0002
Artikel Größe 0111
Artikel Größe 1000

Man könnte es auch wie @allesweg machen (zwei Teilstrings als Parameter für ORDER BY, ggf. automatisch Vornullen kann man mal mittels z.B. RIGHT("0000" + Zahl, 4) machen).

Aber eigentlich hat @DashDash vollkommen recht - ein Zerpflücken von Text zum Sortieren macht man vllt. mal beim Import von Fremddaten aber man möchte solche "Kraut-und-Rüben-Felder" eigentlich nicht in der DB haben.

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hört sich gut an. Größen sind tricky, weil die nicht unbedingt standardisiert sind.. jedes Land hat ihre eigenen größen und man kann in der Regel nicht von dem Größenraster eines Artikels auf einen anderen Artikel übertragen. 

Ich würde das ganze warscheinlich etwas komplizierter angehen. Anfangen würde ich mit der Definition einer Größenraster Tabelle, die hätte eine Referenz auf verschiedene Größen und einen sortkey. Eine Größe wäre erstmal nur als Name definiert (wo man später noch mehr Felder hinzufügen kann).

Die Artikel würden dann eine Größe referenzieren. Wenn du sortieren möchtest, müsstest du über die Größe zum Größenraster hinjoinen und könntest dann sortieren anhand des sort keys. Der Vorteil ist, das du dann auch andere Größen für allerlei Artikel ordentlich sortieren kannst - weil es eben nur innerhalb eines Artikel Größenrasters sortierst. Wenn du alle Artikel sortierst, müsstest du doppelt sortieren nämlich einfach z.B. auf dem Artikel name und dann auf dem sortkey innerhalb des Größenrasters.

Das ganze hier stützt sich auf die Annahme, dass ihr nicht ausschließlich Schrauben nutzt wo dasselbe Größenraster genommen wird.

 

Das ganze soll natürlich nur als Denkanstoß für dich dienen :-)

Bearbeitet von DashDash
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 2 Stunden schrieb murat1895:

Wir werden dann wohl ein anderweitiges Feld in der DB erstellen und dieses vernünftig trennen -.- Denke das ist dann auch die beste und sauberste Lösung.

So eine Art "SortOrder" und dann "ORDER BY SortOrder ASC"? Wärst nicht der erste, der sowas macht. ;) 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn es in deiner DB nicht nur Holzschrauben verschiedener Größe gibt (dann wäre aber auch die Angabe "Holzschraube" sinnlos), sondern auch andere Produkte, dann würde ich auch im Sinne der Normalisierung Produkt und Bemaßung trennen.

Idealerweise, wenn dein DBMS sowas kann, wäre dann die Bemaßung ein Geometrie-Objekt.

 

Gruß Martin

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...