MySQL - Umwandlung von Datentypen
dolito
- datenbank
0 Ilja0 dolito0 Vinzenz Mai0 dolito-1 dolito0 Vinzenz Mai
Hallo Leutz,
sanfte Grüße aus dem sonnigen Osten :))
Ich habe mal wieder ein Problem mit meiner Fussballseite. Ich habe da schon ein paar mal Fragen müssen, als es noch ums Datenbank-design ging und ich gerade mit MySQL angefangen habe. Das ist jetzt so ca. 1 - 2 Jahre her.
Diesmal geht es um die Erstellung der Tabelle einer Staffel. Das ganze klappt recht gut - schon seit Juli 2005. Allerdings ist jetzt zum ersten mal ein besonderes Problem aufgetreten.
In der Datenbank-Abfrage für die Tabelle, werden ja die Tore der Heim-Manschaft mit denen der Gast-Mannschaft verglichen. Je nach Ergebniss werden dann die Punkte (Sieg = 3, Unentschieden = 1, Niederlage = 0) vergeben.
Jetzt zum eigentlichen Problem:
Da ich die Spalten mit den Toren nicht als Integer speichern kann* (, sondern als Varchar), werden die Tore auch als Zeichenkette verglichen. D.h. in meinem speziellen Fall, dass 10 kleiner als 2 ist.
Dadurch wird natürlich die Tabelle falsch berechnet.
*= weil bei spielen die noch ausstehen, die Tore auf '-' stehen und somit nicht berücksichtigt werden
In PHP könne ich das ja ganz leicht umwandeln, mit nem Cast-Operator (z.B. (int) ), aber das wäre viel zu viel Overhead, den ich zusätzlich aus der Datenbank auslesen müsste. Dann müsste ich extra Funktionen für die sortierung schreiben, und und und ...!
Ich hab auch schon probiert, die Tore mit 1 zu multiplizieren oder die Binärwerte zu vergleichen:
1*(heim_tore) < 1*(gast_tore)
BIN(heim_tore) < BIN(gast_tore)
Das bringt aber auch nix! :(
Jetzt meine Frage:
Gibt es für MySQL auch eine Art Cast-operator??
Ich weiß, das ich Zahlen in Zeichenketten umwandeln kann, aber geht das auch umgekehrt?
Ich danke Euch schon mal für die Hilfe.
mfg dolito
yo,
Ich habe mal wieder ein Problem mit meiner Fussballseite. Ich habe da schon ein paar mal Fragen müssen, als es noch ums Datenbank-design ging und ich gerade mit MySQL angefangen habe. Das ist jetzt so ca. 1 - 2 Jahre her.
ich frage mich, ob du es warst, den ich damals die abfrage zu einer fussball-tabelle erstellt habe, kann mich nur noch schemenhaft erinnern.
Da ich die Spalten mit den Toren nicht als Integer speichern kann* (, sondern als Varchar), werden die Tore auch als Zeichenkette verglichen. D.h. in meinem speziellen Fall, dass 10 kleiner als 2 ist.
Dadurch wird natürlich die Tabelle falsch berechnet.*= weil bei spielen die noch ausstehen, die Tore auf '-' stehen und somit nicht berücksichtigt werden
das ist unsinn. weil man das auch ganz einfach mit einen NULL wert oder einen negativen wert lösen könnten. damit könntest du einen integer wert nehmen und die berechnungen stimmen wieder.
Ilja
ich frage mich, ob du es warst, den ich damals die abfrage zu einer fussball-tabelle erstellt habe, kann mich nur noch schemenhaft erinnern.
Naja, ich kann mich zumindest an deinen nick erinnern. Aber das war ja nicht das einzigste mal, dass ich hier war.
Erstellt hab ich die Abfrage selber, aber ich kannte die SUM()-Funktion noch nicht und jemand hat mich drauf gebracht.
das ist unsinn. weil man das auch ganz einfach mit einen NULL wert oder einen negativen wert lösen könnten. damit könntest du einen integer wert nehmen und die berechnungen stimmen wieder.
Stimmt! Hast recht und mitlerweile bin ich schon drauf gekommen. Aber nur zur Vollständigkeit: Gibt es nun eine derartige Funktion??
mfg dolito
Hallo dolito,
Stimmt! Hast recht und mitlerweile bin ich schon drauf gekommen. Aber nur zur Vollständigkeit: Gibt es nun eine derartige Funktion??
RTFM!
Verwunderte Grüße
Vinzenz
RTFM!
Na is ja schön das du das Schimpfen schon gelernt hast, aber blöd wenn auf dem Server MySQL 4 läuft.
The DECIMAL type is available as of MySQL 5.0.8.
was soviel heiß wie 'Der DECIMAL Typ ist ab version 5.0.8 verfügbar'.
oder irre ich mich?
mfg dolito
Ich habs grad mal probiert, aber nix!
Keine Fehlermeldung und auch kein Fortschritt!
soviel zum RTFM!!
Aber dennoch danke!
Wenn noch einer was weiß, bitte posten.
MFG dolito
Hallo dolito,
Ich habs grad mal probiert, aber nix!
welch tolle Problembeschreibung :-( Jeder kann problemlos nachvollziehen, was Du probiert hast.
Könntest Du Dich an die Tipps für Fragende halten?
soviel zum RTFM!!
Ich kann Dir nur sagen, dass das auch unter MySQL 4.0 wunderbar funktioniert. Genauso wie es im Handbuch steht. Ich habe nichts anderes erwartet.
extrem verwunderte Grüße
Vinzenz
yo,
alles ok Vinzenz ? klingst ein wenig genervt....
Gruß
Ilja
Hallo Ilja,
alles ok Vinzenz ? klingst ein wenig genervt....
Danke der Nachfrage. Ich war genervt :-) Das kann sogar ich meinen Beiträgen entnehmen. Aber jetzt bin ich frisch geduscht und wieder etwas entspannter ...
Beruflich hab' ich zur Zeit mehr zu tun, als ich erledigen kann. Da weiß ich allerdings, dass das ein temporärer Zustand ist :-) Gestern hab' ich erfahren, dass zwei Schiedsrichter meiner Gruppe absteigen, das Unkraut im Schrebergarten wächst so schnell, dass wir mit dem Zurückschneiden, Jäten und Ausgraben nicht nachkommen und bedroht so das Verhältnis zu den Nachbarn, die am Samstag bei ALDI gekaufte Waage zeigt vier Kilo mehr an als die alte von IKEA und zwei mehr als die meiner Freundin - und zu allem Überfluss ist hier jemand nicht in der Lage, selbständig im MySQL-Handbuch das nachzuschlagen, was er braucht.
OK, ich hab' den Eindruck, dolito sieht zum ersten Mal das Handbuch und ich hätte meine Anmerkungen höflicher anbringen können. Insbesondere habe ich bei meinem ersten Posting meinen Standardspruch bezüglich der MySQL-Version vergessen und ich hätte ihm auch schreiben können, dass er als Workaround für das mangelhafte DB-Design den Vergleich mit
CAST(heim_tore AS UNSIGNED) < CAST(gast_tore AS UNSIGNED)
durchführen könnte. Ich war optimistischerweise der Ansicht, dass er das mit meinem Hinweis auf den Handbuchabschnitt selbst hinbekäme. Vielleicht macht es ja einen Unterschied, ob man so einen Hinweis mit "Da, mach!" (übersetzt RTFM) hinknallt oder auf dem Silbertablett mit "Handbuchabschnitt xyz könnte Dir bei Deinem Problem helfen, als Datentyp für die Umwandlung böte sich UNSIGNED an." präsentiert.
Was mich zusätzlich geärgert hat, ist das Ausschlagen von guten Ratschlägen (z.B. Dein Hinweis auf NULL-Werte), was dazu führt, dass jetzt ein Workaround für schlechtes Design her muss, was er auch nicht alleine hinkriegt. Anschließend ohne Code zu präsentieren noch behaupten, mein durchaus zielführender Hinweis würde zu nichts führen, man möge doch bitte andere Hinweise geben, setzt dem Ganzen die Krönung auf.
Ja, ja ich weiß, in einer solchen Stimmung sollte man besser aufs Antworten verzichten. Dennoch denke ich, dass es manchmal nichts schadet, jemanden auf fehlende Angaben und mangelnde Eigeninitiative hinzuweisen, insbesondere dann, wenn sich ein Fragesteller wie hier im Thread darüber beklagt, dass die Hinweise für seine (bisher unbekannte) Version angeblich unzutreffend seien und zudem überhaupt nicht funktionieren (ohne Codebeispiel).
Freundliche Grüße
Vinzenz
Hallo
alles ok Vinzenz ? klingst ein wenig genervt....
Danke der Nachfrage. Ich war genervt :-) Das kann sogar ich meinen Beiträgen entnehmen. Aber jetzt bin ich frisch geduscht und wieder etwas entspannter ...
da hat sogar jemand meinen Anmeldenamen (leicht modifiziert, da geschützt) zu einem Trollversuch missbrauchen wollen. Das finde ich nun gar nicht nett - es beweist mir, dass man wirklich nicht posten sollte, wenn man nicht locker und entspannt ist. Mein Tonfall in diesem Thread war nicht immer angemessen, zu den Aussagen meiner Postings selbst stehe ich jedoch.
Danke fürs Löschen im anderen Thread. Mir wäre es durchaus recht, wenn man auf diesen meinen Beitrag nicht antworten könnte.
Freundliche Grüße
Vinzenz
Danke der Nachfrage. Ich war genervt :-) Das kann sogar ich meinen Beiträgen entnehmen. Aber jetzt bin ich frisch geduscht und wieder etwas entspannter ...
Ich habs auch mitbekommen...
Beruflich hab' ich zur Zeit mehr zu tun, als ich erledigen kann. Da weiß ich allerdings, dass das ein temporärer Zustand ist :-) Gestern hab' ich erfahren, dass zwei Schiedsrichter meiner Gruppe absteigen, das Unkraut im Schrebergarten wächst so schnell, dass wir mit dem Zurückschneiden, Jäten und Ausgraben nicht nachkommen und bedroht so das Verhältnis zu den Nachbarn, die am Samstag bei ALDI gekaufte Waage zeigt vier Kilo mehr an als die alte von IKEA und zwei mehr als die meiner Freundin - und zu allem Überfluss ist hier jemand nicht in der Lage, selbständig im MySQL-Handbuch das nachzuschlagen, was er braucht.
Sorry, bin wohl zu blöd, aber vor meinem Posting hatte ich ne halbe Stunde mit Google und MySQL-Seite zu tun. Habs nur nicht gefunden. Vielleicht bin ich ja auch etwas gestresst.
OK, ich hab' den Eindruck, dolito sieht zum ersten Mal das Handbuch und ich hätte meine Anmerkungen höflicher anbringen können. Insbesondere habe ich bei meinem ersten Posting meinen Standardspruch bezüglich der MySQL-Version vergessen und ich hätte ihm auch schreiben können, dass er als Workaround für das mangelhafte DB-Design den Vergleich mit
Version hätte ich wohl erwähnen sollen.
Das war die erste DB, die ich je entworfen hatte. Hatte damals also NULL erfahrung damit und hab an sowas auch nicht gedacht.
CAST(heim_tore AS UNSIGNED) < CAST(gast_tore AS UNSIGNED)
durchführen könnte. Ich war optimistischerweise der Ansicht, dass er das mit meinem Hinweis auf den Handbuchabschnitt selbst hinbekäme. Vielleicht macht es ja einen Unterschied, ob man so einen Hinweis mit "Da, mach!" (übersetzt RTFM) hinknallt oder auf dem Silbertablett mit "Handbuchabschnitt xyz könnte Dir bei Deinem Problem helfen, als Datentyp für die Umwandlung böte sich UNSIGNED an." präsentiert.
Danke für den nochmaligen Hinweis.
Was mich zusätzlich geärgert hat, ist das Ausschlagen von guten Ratschlägen (z.B. Dein Hinweis auf NULL-Werte), was dazu führt, dass jetzt ein Workaround für schlechtes Design her muss, was er auch nicht alleine hinkriegt. Anschließend ohne Code zu präsentieren noch behaupten, mein durchaus zielführender Hinweis würde zu nichts führen, man möge doch bitte andere Hinweise geben, setzt dem Ganzen die Krönung auf.
Ausschlagen? Nein, nicht wirklich. Aber ich hab den Verband im Nacken und wollte das heute noch lösen. Da aber ne ganze Menge Scripte dazugehören und ich die Seite sowieso grad neubastle, wollte ich ne schnelle Lösung für die aktuelle Version finden.
Ja, ja ich weiß, in einer solchen Stimmung sollte man besser aufs Antworten verzichten. Dennoch denke ich, dass es manchmal nichts schadet, jemanden auf fehlende Angaben und mangelnde Eigeninitiative hinzuweisen, insbesondere dann, wenn sich ein Fragesteller wie hier im Thread darüber beklagt, dass die Hinweise für seine (bisher unbekannte) Version angeblich unzutreffend seien und zudem überhaupt nicht funktionieren (ohne Codebeispiel).
Ich gebe mich jetzt mal einsichtig und möchte mich nochmal bedanken. Tut mir leid, dass ich dir den Tag fast verdorben hätte (und das mit dem Unkraut und der Waage ;) ).
MFG dolito
yo Vinzenz,
Beruflich hab' ich zur Zeit mehr zu tun, als ich erledigen kann. Da weiß ich allerdings, dass das ein temporärer Zustand ist :-) Gestern hab' ich erfahren, dass zwei Schiedsrichter meiner Gruppe absteigen, das Unkraut im Schrebergarten wächst so schnell, dass wir mit dem Zurückschneiden, Jäten und Ausgraben nicht nachkommen und bedroht so das Verhältnis zu den Nachbarn, die am Samstag bei ALDI gekaufte Waage zeigt vier Kilo mehr an als die alte von IKEA und zwei mehr als die meiner Freundin - und zu allem Überfluss ist hier jemand nicht in der Lage, selbständig im MySQL-Handbuch das nachzuschlagen, was er braucht.
ich würde sagen, der ganz normale wahnsinn ;-)
dicker kommt es erst, wenn einen dann auch noch die frau/freundin verläßt, weil man nun ja keine zeit mehr für sie hat, der temporäre zustand der mehrarbeit des jobs sich dadurch auflöst, dass man die kündigung erhält, womit man wieder mehr zeit für die frau/freundin hätte, wenn da nicht schon der neue lover wäre, der nach ihrer meinung ja so viel besser ist, die eigene mutter anruft und wissen will, warum man sich am muttertag nicht gemeldet hat, das finanzamt noch fragen zu der steuererklärung hat und am gleichen tag die zeugen jehovas und die GEZ an der tür klingeln.....
Ja, ja ich weiß, in einer solchen Stimmung sollte man besser aufs Antworten verzichten. Dennoch denke ich, dass es manchmal nichts schadet, jemanden auf fehlende Angaben und mangelnde Eigeninitiative hinzuweisen
das schon, aber ich hatte ein wenig das gefühl, der hat die volle breitseite bekommen und zwar mehr, als ihm zusteht. bei anderen hätte mich das nicht gewundert, aber bei dir war es schon komisch. auf der anderen seite sind wir alle nur menschen und ich kann das gut verstehen. naja wird schon wieder, bald haste wieder kontrolle über das chaos "leben".
Gruß
Ilja
Hallo.
dicker kommt es erst, wenn [...] am gleichen tag die zeugen jehovas und die GEZ an der tür klingeln.....
Haben die noch nicht fusioniert?
MfG, at
Hi
Hallo dolito,
Ich habs grad mal probiert, aber nix!
welch tolle Problembeschreibung :-( Jeder kann problemlos nachvollziehen, was Du probiert hast.
Könntest Du Dich an die Tipps für Fragende halten?
Ich habe mich auf das vorherige Posting bezogen, tut mir leid, dass ich nicht in jedem Beitrag eine Problemzusammenfassung schreibe.
soviel zum RTFM!!
Ich kann Dir nur sagen, dass das auch unter MySQL 4.0 wunderbar funktioniert. Genauso wie es im Handbuch steht. Ich habe nichts anderes erwartet.
Sorry, ich hab mir nur die ersten Zeilen angesehen (vom 5er-Manual) und dann so geschrieben:
DECIMAL heim_tore < DECIMAL gast_tore
=> Falsch
Lese nächstes Mal ein wenig ausführlicher, aber mein Tag war heut auch nicht der beste.
mfg dolito
Hallo dolito,
RTFM!
Na is ja schön das du das Schimpfen schon gelernt hast,
ich schimpfe nicht, lies bitte in der Forumshilfe nach.
aber blöd wenn auf dem Server MySQL 4 läuft.
Ach ja, das hat mir meine Glaskugel leider verschwiegen. Sowas Blödes aber auch. Ich bitte Dich daher inständig, das entsprechende Handbuchkapitel zu konsultieren.
Ist es so schwer, dort den Verweis zur passenden Version zu finden?
Ist es so schwer, im Inhaltsverzeichnis den relevanten Abschnitt zu finden?
Ist es so schwer, in der Suche die eigene Version auszuwählen und das bereits bekannte Stichwort "CAST" einzugeben?
The DECIMAL type is available as of MySQL 5.0.8.
was soviel heiß wie 'Der DECIMAL Typ ist ab version 5.0.8 verfügbar'.
Wie kommst Du auf die Idee, dass Du unbedingt den Typ DECIMAL benötigst?
Die Verwunderung wächst,
Vinzenz