Antworten auf deine Fragen:
Neues Thema erstellen

MYSQL: 2 Unterschiedliche Sortierungen

netbandit

Aktives Mitglied

Ein Hallo an alle :)

also ich häng mal wieder; Abhängig vom Wert in einem Feld soll die Sortierung der anderen Felder unterschiedlich bei der Ausgabe ausfallen :uhm:

Vereinfachtes Beispiel:

Typ | Name | Vorname
2 | Name1| Vorname1
2 | Name2| Vorname2
1 | Name3| Vorname3
2 | Name4| Vorname4

Grundsätzlich soll nach Typ aufsteigend sortiert Werden, aaaaaaber wenn Typ den Wert 1 hat, soll nach Name, Vorname sortiert werden und beim Wert von 2 nach Vorname, Name; also die Spalten vertauscht.

dachte an sowas wie

SELECT... ORDER BY Typ=1, Name, Vorname, Typ=2, Vorname, Name
Geht aber nicht. Hat jemand eine Idee?

Grüße :)
 

Chriss1987

me.drinkCoffee();

AW: MYSQL: 2 Unterschiedliche Sortierungen

Hi,

du kannst im ORDER BY ein IF-Statement verwenden:
Code:
SELECT ... ORDER BY IF(typ=1, name, vorname), IF(typ=1, vorname, name)
Also wenn typ=1 wird zuerst nach name, dann nach vorname sortiert, wenn typ!=1 wird erst nach vorname, dann nach name sortiert.

HTH
Schöne Grüße aus dem Sauerland!
Chriss
 
Zuletzt bearbeitet:

netbandit

Aktives Mitglied

AW: MYSQL: 2 Unterschiedliche Sortierungen

Hallo Chriss,

funktioniert (so ähnlich). Allerdings wenn Je Typ mehr als 2 Spalten Unterschiedlich sind, die Anzahl der Spalten in der Sortierung unterschiedlich sind oder ich nach dem Spaltennamen z.B. DESC einfügen will geht es wieder in die Hose.

Beispiel:

ORDER BY typ, IF(typ=1, name, vorname)

Funktioniert

ORDER BY typ, IF(typ=1, name, vorname DESC)

Funktioniert nicht

Habe auch schon alle möglichen Sachen wie in eckige, geschweifte Klammern usw. versucht - ohne Erfolg

Grüße & Danke :)
 
Zuletzt bearbeitet:

Chriss1987

me.drinkCoffee();

AW: MYSQL: 2 Unterschiedliche Sortierungen

Hi netbandit,

ja, das stimmt, was du aber machen kannst ist:
Code:
...ORDER BY typ, IF(typ=1, name, vorname) DESC...
eine andere Möglichkeit fällt mir auf die Schnelle auch nicht ein...

Schöne Grüße aus dem Sauerland und schönes Wochenende!
Chriss
 
Zuletzt bearbeitet:

netbandit

Aktives Mitglied

AW: MYSQL: 2 Unterschiedliche Sortierungen

Jup, das wäre eine Möglichkeit; allerdings wird dann name auch absteigend sortiert.

Denke da muss irgendwie etwas maskiert werden, nur keine Ahnung wie. :hmpf:

Ich glaube ich mach jetzt WE, vielleicht finde ich etwas, bzw. fällt mir Montag etwas dazu ein

Danke ;)

Achso: Funktioniert nicht = MySQL-Fehlermeldung (...error in your SQL syntax... near DESC)
 

Chriss1987

me.drinkCoffee();

AW: MYSQL: 2 Unterschiedliche Sortierungen

[...]Achso: Funktioniert nicht = MySQL-Fehlermeldung (...error in your SQL syntax... near DESC)

Morgen,

also ich habs grad nochmal mit der Syntax verifiziert
Code:
... ORDER BY IF(typ=1, vorname, nachname) DESC
und keinen Fehler bekommen :?: :?: :?:

MySQL-Server 5.1.37
phpmyadmin 3.3.9

Schöne Grüße aus dem Sauerland!
Chriss
 

netbandit

Aktives Mitglied

AW: MYSQL: 2 Unterschiedliche Sortierungen

Nee, passt schon was Du geschrieben hast. Die Fehlermeldung bezieht sich auf:

ORDER BY typ, IF(typ=1, name, vorname DESC)

Werde aber wieder 2 Query daraus machen, bringt nichts sich da weiter einen Kopp zu machen. Nur unnötige Zeit die da flöten geht.

Grüße & Danke Dir nochmals :)
 

Chriss1987

me.drinkCoffee();

AW: MYSQL: 2 Unterschiedliche Sortierungen

Achso,
hab grad noch nen bisschen gesucht und probiert, aber so, wie ich rausbekommen habe, ist es nicht möglich, die Sortierrichtung bedingt zu wählen, weder mit IF(), IF THEN, noch mit CASE...

Egal wie man klammert oder maskiert. Es gäbe eine aufwendigere Möglichkeit mit PREPARE / EXECUTE oder mit CREATE PROCEDURE, aber das ist wohl dann doch zuviel des Guten! ;)

Schöne Grüße aus dem Sauerland!
Chriss

NACHTRAG:

es gibt noch die Möglichkeit, nach NULL zu sortieren:
Code:
... ORDER BY IF(typ=1, name, NULL) DESC, IF(typ=2, vorname, NULL) ASC
evtl. kannst du ja damit was anfangen...
icon_nick.gif

Schöne Grüße aus dem Sauerland!
Chriss
 
Zuletzt bearbeitet:

netbandit

Aktives Mitglied

AW: MYSQL: 2 Unterschiedliche Sortierungen

OK, vielleicht gehe ich das Ganze ja auch falsch an.
Folgendes: Ich überarbeite ein Projekt, dass ich vor ca. 6-7 Jahren zusammengeschustert habe. Das Dingen beinhaltet u.a. auch einen Terminkalender mit Exportmöglichkeit.

Ausgabe beim Export: Erst alle Temine die über einen längeren Zeitraum gehen auflisten, und zwar erst nach Ort und dann nach Datum sortiert. Die Termine die an nur einem Tag sind, sollen jedoch nach Datum und dann erst nach Ort sortiert werden. Damals hatte ich das mit 2 Queries gelöst (gekürzte Version):

SELECT * FROM termine WHERE von!=bis ORDER BY ort, von, bis, titel
und
SELECT * FROM termine WHERE von=bis ORDER BY von, bis, ort, titel
Nu dachte ich, ich könnte es gescheit zusammenfassen. Mein Lösungsansatz wäre:

SELECT daten, IF(von!=bis, 1, 2) as ord FROM termine ORDER BY ord, ...???
Und da hört es bei mir auch schon auf :uhm:

Also wenn ich im ORDER BY mehr als 1 IF() basteln müsste, bleibe ich doch lieber bei der bisherigen Version. :D

Grüße :)

UMPF..., NULL könnte die Lösung sein:
SELECT daten, IF(von!=bis, 1, 2) as ord FROM termine ORDER BY ord, IF(ord=1, ort, NULL), von, bis, IF(ord=2, ort, NULL)
Muss ich nachher mal ausprobieren und Geschwindigkeit testen.

Danke Chriss :)
 
Zuletzt bearbeitet:

Chriss1987

me.drinkCoffee();

AW: MYSQL: 2 Unterschiedliche Sortierungen

Ja, die Geschwindigkeit würde mich auch mal interessieren! ;)
Aber sicherlich schneller als 2 Queries, oder? Kannst ja mal die Ergebnisse posten (mit anzahl der Datensätze), hab grad keine Möglichkeit, das auf die Schnelle nachzubauen ;)

[offtopic]Alte Projekte nochmal anfassen kenne ich, da schlage ich regelmäßig die Hände über'm Kopf zusammen und denke "was hast du denn da gemacht..." :p[/offtopic]

Schöne Grüße aus dem Sauerland!
Chriss
 

netbandit

Aktives Mitglied

AW: MYSQL: 2 Unterschiedliche Sortierungen

Report:

Vorab, es funktioniert :)

Geschwindigkeit ist so naja: 40 Durchläufe etwas mehr als 10.000 Datensätze je Durchlauf (inkl. mysql_fetch_array())

Version alt (je 2 Queries), Ø: 0,514747 s
Version neu (je 1 Query), Ø: 0,448593 s

Muss man glaube ich nicht unbedingt haben. Werde es aber trotzdem mal so verbauen und ein Weilchen beobachten.

Danke für die Schubserei :D
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.565
Beiträge
1.538.066
Mitglieder
67.488
Neuestes Mitglied
Andrew56524
Oben