Mysql "umdrehen"

ZockerLordLP

Erfahrenes Mitglied
Hallo Community

Ich habe ein Problem beim auslesen einer Tabelle. Ich habe folgendes in einer Spalte stehen:
1.Januar->Start
2.Ferbruar->2. Start
3. März->3.Start
etc.

Nun möchte ich gerne, dass März oben steht und Januar unten. Order by funktioniert nicht, da es ja in einer Spalte ist.
 
Der ganze Text, z.B. "1. Januar -> Start" steht so in der Spalte und beginnt immer mit einer Zahl?

Dann wandle es mit CAST in eine Zahl um und sortiere damit!
 
Jetzt zeig uns doch mal bitte wie der Inhalt von 2, 3, ... Spalten wirklich aussieht, damit man dann weiß was tatsächlich drinnen steht.
 
Und du willst nun nach +10, -2 und +25 sortieren?
Und soll es in MySQL oder in PHP sortiert werden?

Nachtrag:
Ist nicht wirklich kompliziert:
Alles vor dem ersten > nehmen, davon alles nach dem ersten < und am Schluss in eine Zahl wandeln
SQL:
SELECT
	t.col
FROM	
	(
		-- Testdaten
		SELECT '<+10>User-XY hat sich eingeloggt' AS col
		UNION SELECT '<-2>User-XY hat sich abgemeldet' AS col
		UNION SELECT '<+25>User-XY hat etwas geliked' AS col
	) t
ORDER BY
	CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(t.col, '>', 1), '<', -1) AS SIGNED) ASC
Code:
<-2>User-XY hat sich abgemeldet
<+10>User-XY hat sich eingeloggt
<+25>User-XY hat etwas geliked
 
Zuletzt bearbeitet von einem Moderator:
Oder einfach mit REPLACE das erste "<" durch "" (nichts) ersetzen.

SQL:
CAST(REPLACE(feldname, "<", "") AS SIGNED)
 
Dann suchen wir halt alles vor dem erste Leerzeichen und nach dem >. Anschliessend ein Datum draus machen und sortieren
SQL:
ORDER BY
        STR_TO_DATE(SUBSTRING_INDEX(SUBSTRING_INDEX(t.col, ' ', 1), '>', -1) ,'%e.%m.%y') ASC

Hier der Test: http://sqlfiddle.com/#!2/9bf90/4
 
Zuletzt bearbeitet von einem Moderator:
Zurück