Umsetztung einer Versionierung
Dimitri
- datenbank
0 Tom0 Vinzenz Mai0 Dimitri0 Vinzenz Mai0 Dimitri
0 hotti
Hallo an alle,
Wir verwenden
MySQL Server Version: 5.0.24-standard
MySQL-Client-Version: 5.0.37
phpMyAdmin - 2.11.9.1
Ich muss eine Versionierung abbilden und in der DB speichern.
Jetzt habe ich das Problem das die Versionierung so aussieht:
1
1.1
1.2
1.XXXXXX
2
Mein Problem besteht in der Wahl des Typs des Datenbankfeldes für die Version.
dh. wenn ich diese INT nehme, habe ich ka nur Ganze zahlen.
Wenn ich VARCHAR nehme, habe ich eine sehr komische Sortierung(1.1 1.10 1.2)
wenn ich Double oder float nehme, habe ich das Problem das ich die Nachkommastellen angeben muss. Dh. wenn ich 2 angebe kommt 1.01
Hat einer von euch ne Idee wie man eine Versionierung am Besten abbilden kann?
DANKE
Hello,
Ich muss eine Versionierung abbilden und in der DB speichern.
Jetzt habe ich das Problem das die Versionierung so aussieht:
1
1.1
1.2
1.XXXXXX
2Mein Problem besteht in der Wahl des Typs des Datenbankfeldes für die Version.
dh. wenn ich diese INT nehme, habe ich ka nur Ganze zahlen.
Wenn ich VARCHAR nehme, habe ich eine sehr komische Sortierung(1.1 1.10 1.2)
wenn ich Double oder float nehme, habe ich das Problem das ich die Nachkommastellen angeben muss. Dh. wenn ich 2 angebe kommt 1.01
Nimm varchar und fülle die Felder linksseitig mit einem neutralen Element (Codepoint kleiner als die gültigen Zeichen) auf. Das Auffüllen geht z.B. mit einem Trigger oder besser eine Stored Procedure beim Eintragen automatisch.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Nimm varchar und fülle die Felder linksseitig mit einem neutralen Element (Codepoint kleiner als die gültigen Zeichen) auf. Das Auffüllen geht z.B. mit einem Trigger oder besser eine Stored Procedure beim Eintragen automatisch.
kannst du das bitte näher erläutern
danke
Hello,
Nimm varchar und fülle die Felder linksseitig mit einem neutralen Element (Codepoint kleiner als die gültigen Zeichen) auf. Das Auffüllen geht z.B. mit einem Trigger oder besser eine Stored Procedure beim Eintragen automatisch.
kannst du das bitte näher erläutern
Ich war davon ausgegangen, dass Du nicht nur numerische Werte hast und trotzdem sortieren können willst. Deshalb dacht ich an mehrere Spalten im Typ VarChar mit linksseitiger Auffüllung.
Sonst ist natürlich Vinzenz' Vorschlag besser.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hallo,
Ich muss eine Versionierung abbilden und in der DB speichern.
Jetzt habe ich das Problem das die Versionierung so aussieht:
1
1.1
1.2
1.XXXXXX
2
Mein Problem besteht in der Wahl des Typs des Datenbankfeldes für die Version.
dh. wenn ich diese INT nehme, habe ich ka nur Ganze zahlen.
Wenn ich VARCHAR nehme, habe ich eine sehr komische Sortierung(1.1 1.10 1.2)
nimm zwei INTEGER-Spalten (z.B. major und minor), erlaube in minor NULL-Werte, verwende für die Anzeige eine berechnete Spalte (CONCAT, unter Verwendung von COALESCE).
Freundliche Grüße
Vinzenz
wie bekomme ich bei dieser Umsetztung die höchste Version raus?
Hallo,
wie bekomme ich bei dieser Umsetztung die höchste Version raus?
ganz simpel:
order by major DESC, minor DESC
ggf. bei minor NULL-Werte berücksichtigen. bzw. dort NULL-Werte nicht zulassen, statt dessen 0 verwenden und bei der Ausgabe .0 entfernen.
Freundliche Grüße
Vinzenz
Hallo,
ganz simpel:
order by major DESC, minor DESC
ggf. bei minor NULL-Werte berücksichtigen. bzw. dort NULL-Werte nicht zulassen, statt dessen 0 verwenden und bei der Ausgabe .0 entfernen.
Bei Verwendung von 0 (statt NULL):
Beispiel (tabelle versionierung):
major | minor
------+------
1 | 0
1 | 1
1 | 2
1 | 12
2 | 0
2 | 1
2 | 2
und
SELECT
-- sorge dafür, dass die Versionen 1 und nicht 1.0 lauten
[link:http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_concat@title=CONCAT](major, [link:http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#function_if@title=IF](minor = 0, '', CONCAT('.', minor))) version
-- und gib der berechneten Spalte einen sprechenden Namen: version
FROM
versionierung
ORDER BY
major DESC,
minor DESC
liefert
version
-------
2.2
2.1
2
1.12
1.2
1.1
1
Mit LIMIT kannst Du dies auf die neueste Version eingrenzen (limitieren).
Freundliche Grüße
Vinzenz
wie bekomme ich bei dieser Umsetztung die höchste Version raus?
Danke dir vielmals!
Habs hinbekommen!
hi,
Ich muss eine Versionierung abbilden und in der DB speichern.
Jetzt habe ich das Problem das die Versionierung so aussieht:
1
1.1
1.2
1.XXXXXX
2
Mein Ansatz wäre der, dass ich die Versionen als Integer speichere. Mal angenommen, die Maximalversion wäre 255.255, dann bräuchtest Du dafür 16 Bit wie folgt:
|_|_|_|_|_|_|_|_|.|_|_|_|_|_|_|_|_|
|_ a _| |_ b _|
Die Umrechnung geht mit Bit-Operatoren oder algebraisch:
int = (a * 255 exp 1) + (b * 255 exp 0)
(das wäre auch die Umsetzung von Vinzenz "major.minor")
Hotte