Mit Versionen gefülltest Array sortieren

Das mit dem Convert hat geklappt. Verstehe allerdings trotzdem nicht wieso ihr dachtet ich hätte etwas falsch...

Wir sind schlechte Menschen (zumindest ich) und denken immer das die anderen Schuld sind ! ! !

Ich muss zu meiner Schande gestehen das es nur einstellige Werte zum Sortieren gab und da hat es ja gestimmt.
 
Naja, ich hab persönlich gar keine Umgebung gehabt, um zu testen, konnte also immer nur hier im Forum lesen und überlegen wie es funktionieren könnte.

Du hast ja geschrieben "Das sortieren funktioniert scheinbar nicht" und "Also mir sieht es eher danach aus als würde er falsch sortieren."
Deshalb musst du ja irgendetwas falsch haben. Dass es hier im Forum auch schon falsch stand ist ja ne andere Sache.

Aber ich wusste zum Beispiel nicht, was bei deinem Query rauskommt, deshalb wollte ich den Query haben und den dazugehörigen Output.

Je mehr Infos du gibst, desto besser kann man dir helfen. ;)
 
Also, wenn man es über SQL lösen will, dann sollte man die Version komplet auftrennen. Denn klar vergleichst du heute ev. nur die letzte Stelle, aber Morgen? Ist die 2t letzte Stelle?

SQL:
SELECT 
	* 
FROM 
	(
		SELECT
			id,
			version,
			@major := CAST(SUBSTRING_INDEX(version, '.', 1) AS SIGNED) AS major,
			--Zuerst mittels SUBSTRING_INDEX() den major abschneiden, dann mittels SUBSTRING_INDEX() den Erstel Teil
			--also den minor auslesen und mit CAST() in eine Zahl wandeln
			@minor := CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(version, '.', -3), '.', 1) AS SIGNED) AS minor,
			@srvicep := CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(version, '.', -2), '.', 1) AS SIGNED) AS srvicep,
			@build := CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(version, '.', -1), '.', 1) AS SIGNED) AS build,
			--Zum einfachen Sortieren und vergleichen kann an diese Elemente je auf 3 Stellen aufgefüllt
			--zu einem sortier und Filterbaren Versionsstring zusamensetzen
			CONCAT(
				LPAD(@major, 3, '0'),'.',
				LPAD(@minor, 3, '0'),'.',
				LPAD(@srvicep, 3, '0'),'.',
				LPAD(@build, 3, '0')) AS sortable_version
		FROM
			--Testdaten, da ich kein Bock hatte eine Tabelle anzulegen
			(SELECT 1 AS id, '1.4.3' AS version UNION SELECT 2, '1.4.23.1'
			UNION SELECT 3, '1.4.23.12' UNION SELECT 4, '1.4.23.10' UNION SELECT 5, '1.4.23.7') AS releases
		ORDER BY 
			sortable_version
	) AS rel
WHERE
	sortable_version BETWEEN '001.004.023' AND '001.004.023.010'

Ausgabe des obigen Beispieles
Code:
id | version   | major | minor | srvicep | build | sortable_version
-------------------------------------------------------------------
 2 | 1.4.23.1  |     1 |     4 |      23 |     1 | 001.004.023.001
 5 | 1.4.23.7  |     1 |     4 |      23 |     7 | 001.004.023.007
 4 | 1.4.23.10 |     1 |     4 |      23 |    10 | 001.004.023.010
 
Zuletzt bearbeitet von einem Moderator:
Zurück