KlausStein: Kann MySQL das?

Hallo,

ich habe in einer DB in einer Spalte eine Umstellung einer Nummer gemacht. Alle Einträge, die früher xx001, xx002 usw. hießen, hießen ab Zeitpunkt xy dann xx-0001, xx-0002 usw. Insgesamt handelt es sich aber nur um 10 Werte, die auf diese Art umgestellt wurden.

Nun will ich mit einer Abfrage nach genau dieser Spalte gruppieren.

Folglich werden z.b. xx001 und xx-0001 nicht gruppiert.

Kann ich mysql klar machen, dass die beiden, sowie ihre ca. 9 Geschwisterpaare (xx002/xx-0002, xx003/xx-0003, usw) jeweils zusammen gehören?

Vielleicht über CASE oder IF?

Grüße, KlausStein

  1. Hallo,

    ich habe in einer DB in einer Spalte eine Umstellung einer Nummer gemacht. Alle Einträge, die früher xx001, xx002 usw. hießen, hießen ab Zeitpunkt xy dann xx-0001, xx-0002 usw. Insgesamt handelt es sich aber nur um 10 Werte, die auf diese Art umgestellt wurden.

    Kann ich mysql klar machen, dass die beiden, sowie ihre ca. 9 Geschwisterpaare (xx002/xx-0002, xx003/xx-0003, usw) jeweils zusammen gehören?

    Vielleicht über CASE oder IF?

    Wenn Wert Bindestrich enthält
    Dann
        Zeichenkette bis Bindestrich vereinigt mit Zeichenkette ab Bindestrich
    Sonst
        Wert

    Das müsstest Du hinbekommen. LOCATE(), CONCAT() und SUBSTR() sollten Dir helfen.

    Freundliche Grüße

    Vinzenz

    1. Hallo Vinzenz,

      Wenn Wert Bindestrich enthält
      Dann
          Zeichenkette bis Bindestrich vereinigt mit Zeichenkette ab Bindestrich
      Sonst
          Wert

      falsche Richtung. Ich möchte, dass die Werte ohne Bindestrich so gehandhabt werden, wie ihre jeweiligen "Neuwerte". Es gibt übrigens auch Werte inkl. Bindestrich, die keinen "Altwert" haben, weil nach der Umstellung nun alles mit Bindestrich notiert wird.

      Gruß´, KlausStein

      1. Mein Versuch geht so nicht,
        MySQL ändert zwar die Nummern gem. CASE-Anweisung, aber auch nur die (und bhält nicht die anderen Nummern bei) geschweige denn, dass MySQL die neuen durch CASE-Anweisung geänderten Nummern mit den durch Eintrag identischen Nummern gruppiert.

          
        SELECT k.Name,  
        (CASE b.Nummer  
        WHEN 'xx001' THEN 'xx-0001'  
        WHEN 'xx002' THEN 'xx-0002'  
        WHEN 'xx003' THEN 'xx-0003'  
        WHEN 'xx004' THEN 'xx-0004'  
        WHEN 'xx005' THEN 'xx-0005'  
        WHEN 'xx006' THEN 'xx-0006'  
        END), b.Adresse  
        FROM ...  
        GROUP BY b.Nummer, f.Game  
        ...  
        
        

        Gruß, KlausStein

        1. Hallo Klaus,

          MySQL ändert zwar die Nummern gem. CASE-Anweisung, aber auch nur die (und bhält nicht die anderen Nummern bei) geschweige denn, dass MySQL die neuen durch CASE-Anweisung geänderten Nummern mit den durch Eintrag identischen Nummern gruppiert.

          von selbst kommt MySQL nicht auf die Idee, dass es nach der berechneten Spalte gruppieren soll.

          SELECT k.Name,
          (CASE b.Nummer
          WHEN 'xx001' THEN 'xx-0001'

          [...]

          WHEN 'xx006' THEN 'xx-0006'

          -- Vergiss nicht die Werte, die beibehalten werden sollen

          END)

          -- Vergib der berechneten Spalte einen Aliasnamen.
          , b.Adresse

          FROM ...
          GROUP BY b.Nummer, f.Game

          -- und gruppiere nicht nach Spalte Nummer, sondern nach den Werten der
          -- berechneten Spalte.
          -- [link:http://dev.mysql.com/doc/refman/5.1/en/problems-with-alias.html@title=Aliasnamen darfst Du in der GROUP-BY-Klausel verwenden].

          ...

            
            
            
          Freundliche Grüße  
            
          Vinzenz
          
          1. Hallo Vinzenz,

            von selbst kommt MySQL nicht auf die Idee, dass es nach der berechneten Spalte gruppieren soll.

            Das wußte ich nicht. Danke für die Erklärung.

            WHEN 'xx006' THEN 'xx-0006'
            -- Vergiss nicht die Werte, die beibehalten werden sollen

            Das geht nicht. Dann ist CASE der falsche Ansatz. Denn es gibt tausende andere Werte, die einfach beibehalten werden sollen. Die kann ich nnicht alle aufführen und ich kenne sie auch gar nicht alle.

            Gibt es eine andere Möglichkeit als mit CASE, die nicht das explizite Aufführen der nihct zu ändernden Werte erwartet?

            Gruß', KlausStein

            1. Hallo,

              WHEN 'xx006' THEN 'xx-0006'
              -- Vergiss nicht die Werte, die beibehalten werden sollen

              Das geht nicht. Dann ist CASE der falsche Ansatz. Denn es gibt tausende andere Werte, die einfach beibehalten werden sollen. Die kann ich nnicht alle aufführen und ich kenne sie auch gar nicht alle.

              CASE kennt einen ELSE-Fall. Nutze diesen für alles was beibehalten werden soll.

              Freundliche Grüße

              Vinzenz

              1. CASE kennt einen ELSE-Fall. Nutze diesen für alles was beibehalten werden soll.

                Hallo Vinzenz,

                das weiß ich schon und dachte auch darüber nach. Aber was mir fehlte, war die Syntax für "lasse alles beim alten".

                Gruß, Klaus

                1. das weiß ich schon und dachte auch darüber nach. Aber was mir fehlte, war die Syntax für "lasse alles beim alten".

                  Hallo Forum,

                  ich dachte gerade darüber nach, ob es nicht wirklich Sinn macht, nach über 1 Tag suchen nach der Syntax dieses Problem einfach als neues Posting zu verfassen.

                  Da ich aber weiß, wie ungerne Doppelpostings hier gesehen werden, lasse ich es bleiben.

                  Dabei fiel mir aber auf, dass ich mir schwerlich vorstellen kann, dass hier in den Thread jemals nochmal einer hineinschaut außer Vinzenz, der ja von Begin an "dabei ist".

                  Ich wäre begeistert, wenn ich mit meiner Annahme falsch liege. Läge ich aber richtig, sollte dann nicht über Ausnahmen bei Doppelpostings (vielleicht mit verpflichtendem Link zum Original-Themenstrang) nachgedacht werden??

                  Mir selber geht es ja auch oft so: Das komplexe Hauptproblem eines Fragenden übersteigt oft meine Fähigkeiten, weshalb ich hier mehr frage als antworte. Im Verlauf oder gegen Ende eines Themenstranges könnte aber eine simple "Restfrage" übrig bleiben, die ich locker beantworten könnte. Ich finde aber nie mehr in den Thread hinein.

                  Heißt also, ich gehe davon aus, dass viele meine verbleibende Frage nach der Syntax beantworten könnten, aber das hier ist nicht mehr "deren Thema". Also bleibt mir nichts, als auf Vinzenz zu warten.

                  Deshalb überlege ich auch oft, von vorneherein ein komplexeres Probelm in viele Teilprobleme und Threads aufzuteilen, damit ich nicht in die Doppelpostingproblematik hinein komme. Hat aber für jeden Antwortenden den Nachteil, dass er zu jedem Teilproblem einen Teil des Hintergrundes nicht kennt.

                  Frage: Würden mal alle, die von sich aus (also ohne Hinweis von anderen Forenteilnehmern) diesen Beitrag lesen, einfach mal mit einem No-Text-Post darauf antworten?

                  Vielleicht liege ich ja komplett falsch mit meiner Annhame und im Nchhinein würde sich das vermiedene Doppelposting als völlig richtige bEntscheidung herausstellen.

                  Grüße, Klaus

                  1. Hi!

                    ich dachte gerade darüber nach, ob es nicht wirklich Sinn macht, nach über 1 Tag suchen nach der Syntax dieses Problem einfach als neues Posting zu verfassen.

                    Die Argumente, warum du im alten Thread bleiben sollst, stehen in der Charta. Mach es Helfern einfach, indem du dein Problem an einer Stelle behandelst und nicht auf mehrere Stellen verteilst. Das erleichtert das Nachvollziehen deines Problems und das was dazu bisher an Informationen zusammengetragen wurde.

                    Dabei fiel mir aber auf, dass ich mir schwerlich vorstellen kann, dass hier in den Thread jemals nochmal einer hineinschaut außer Vinzenz, der ja von Begin an "dabei ist".

                    Das ist ein gern begangener Irrtum. Nicht nur ich lese still mit (behaupte ich mal).

                    Mir selber geht es ja auch oft so: Das komplexe Hauptproblem eines Fragenden übersteigt oft meine Fähigkeiten, weshalb ich hier mehr frage als antworte. Im Verlauf oder gegen Ende eines Themenstranges könnte aber eine simple "Restfrage" übrig bleiben, die ich locker beantworten könnte. Ich finde aber nie mehr in den Thread hinein.

                    Um am allgemeinen Geschehen dran zu bleiben, gibt es diverse Konfigurationsmöglichkeiten, wenn man angemeldet ist. Man kann gelesene Postings andersfarbig markieren, so dass man sofort sieht, wenn es was neues gibt. Auch kann man Threads einklappen, wenn alles gelesen ist. Er klappt sich von selbst aus, wenn es wieder was neues gibt.

                    Heißt also, ich gehe davon aus, dass viele meine verbleibende Frage nach der Syntax beantworten könnten, aber das hier ist nicht mehr "deren Thema". Also bleibt mir nichts, als auf Vinzenz zu warten.

                    Naja, manchmal liest man (ich zumindest) als Dritter nur mit einem halben Auge mit. Bei Vinzenz bist du gut aufgehoben.

                    Deshalb überlege ich auch oft, von vorneherein ein komplexeres Probelm in viele Teilprobleme und Threads aufzuteilen, damit ich nicht in die Doppelpostingproblematik hinein komme. Hat aber für jeden Antwortenden den Nachteil, dass er zu jedem Teilproblem einen Teil des Hintergrundes nicht kennt.

                    Eben drum sollst du das nicht machen. Es geht Übersicht bei denen verloren, von denen du Hilfe erwartest.

                    Vielleicht liege ich ja komplett falsch mit meiner Annhame und im Nchhinein würde sich das vermiedene Doppelposting als völlig richtige bEntscheidung herausstellen.

                    Versuch nicht zu tricksen. Das erzeugt bei Entdeckung mehr Unmut und Aufmerksamkeitsverweigerung als dir vielleicht Hilfe von Gelegenheitslesern entgeht.

                    Lo!

                    1. Versuch nicht zu tricksen. Das erzeugt bei Entdeckung mehr Unmut und Aufmerksamkeitsverweigerung als dir vielleicht Hilfe von Gelegenheitslesern entgeht.

                      Hallo dedlfix,

                      nein, es geht mir auch nicht ums tricksen. Aber gerade Deine (und meine übrigens auch!) Annahme, dass ich bei Vinzenz gut aufgehoben bin, zieht doch schon automatisch ein Stückchen Deine Aufmerksamkeit herunter.

                      Im Grunde sehe ich aber ein, dass Doppelpostings bzw. Stückelung eines Gesamtproblems mehr Nachteile als Vorteile bietet. Vor allem denke ich mir, macht es einem Helfer auch mehr Spaß, wenn er vor einem Gesamtkontext helfen kann.

                      Manchmal kribbelts halt in den Fingern, weil ein Doppelpost, der nur noch ein Restproblem zu behandeln gehabt hätte, sicher schnelleren Hilfeerfolg böte als im Ursprungsthread zu bleiben.

                      Aber ich bin ja geblieben. :-)

                      Gruß, Klaus

                  2. Hooy!

                    Dabei fiel mir aber auf, dass ich mir schwerlich vorstellen kann, dass hier in den Thread jemals nochmal einer hineinschaut außer Vinzenz, der ja von Begin an "dabei ist".

                    Ich wäre begeistert, wenn ich mit meiner Annahme falsch liege. Läge ich aber richtig, sollte dann nicht über Ausnahmen bei Doppelpostings (vielleicht mit verpflichtendem Link zum Original-Themenstrang) nachgedacht werden??

                    Ich denke, Du liegst falsch, und halte solche Ausnahmen nicht für sinnvoll.

                    Mir selber geht es ja auch oft so: Das komplexe Hauptproblem eines Fragenden übersteigt oft meine Fähigkeiten, weshalb ich hier mehr frage als antworte. Im Verlauf oder gegen Ende eines Themenstranges könnte aber eine simple "Restfrage" übrig bleiben, die ich locker beantworten könnte. Ich finde aber nie mehr in den Thread hinein.

                    Heißt also, ich gehe davon aus, dass viele meine verbleibende Frage nach der Syntax beantworten könnten, aber das hier ist nicht mehr "deren Thema". Also bleibt mir nichts, als auf Vinzenz zu warten.

                    Ich lese sowas trotzdem (davon ausgehend, daß ich gerade die Zeit dazu habe) und lerne entweder selbst mit oder ergänze auch mal eine Kleinigkeit, z.B. eine weitere Lösungsmöglichkeit, einen noch nicht erwähnten Vor- oder Nachteil einer genannten Lösung, eine Korrektur einer kleineren Ungenauigkeit etc.
                    Generell lese ich aber sehr, sehr viel mehr als ich schreibe, und das auch an allen Stellen der Hauptseite - daß ein Thread schon "heruntergerutscht" ist, stellt überhaupt kein Problem dar. Das Entscheidende ist ein Betreff, der mich anspricht.

                    Deshalb überlege ich auch oft, von vorneherein ein komplexeres Probelm in viele Teilprobleme und Threads aufzuteilen, damit ich nicht in die Doppelpostingproblematik hinein komme. Hat aber für jeden Antwortenden den Nachteil, dass er zu jedem Teilproblem einen Teil des Hintergrundes nicht kennt.

                    Richtig. Diesen Nachteil halte ich für gravierend. Du kriegst dann mit hoher Wahrscheinlichkeit einen Haufen von Teillösungen, die überhaupt nicht zusammenpassen. Und sobald die Helfer das merken, werden sie auch überwiegend säuerlich reagieren; schließlich würden einige der Argumente gegen Doppelpostings auch auf diese Taktik zutreffen.

                    Frage: Würden mal alle, die von sich aus (also ohne Hinweis von anderen Forenteilnehmern) diesen Beitrag lesen, einfach mal mit einem No-Text-Post darauf antworten?

                    No-Text? Ups.

                    Vielleicht liege ich ja komplett falsch mit meiner Annhame und im Nchhinein würde sich das vermiedene Doppelposting als völlig richtige bEntscheidung herausstellen.

                    Ich denke, Deine Entscheidung war richtig.

                    Viele Grüße vom Længlich

                    --
                    Mein aktueller Gruß ist:
                    Makah (Washington [USA])
                2. Hallo,

                  CASE kennt einen ELSE-Fall. Nutze diesen für alles was beibehalten werden soll.

                  das weiß ich schon und dachte auch darüber nach. Aber was mir fehlte, war die Syntax für "lasse alles beim alten".

                  ich ging davon aus, dass "was mir fehlte" bedeutete, dass es jetzt nicht mehr fehlt und Dein Problem gelöst sei.

                  Du kannst in ELSE selbstverständlich auch den Namen der überprüften Spalte verwenden:

                  CASE b.Nummer  
                      WHEN 'xx001' THEN 'xx-0001'  
                      WHEN 'xx002' THEN 'xx-0002'  
                      WHEN 'xx003' THEN 'xx-0003'  
                      WHEN 'xx004' THEN 'xx-0004'  
                      WHEN 'xx005' THEN 'xx-0005'  
                      WHEN 'xx006' THEN 'xx-0006'  
                      ELSE b.Nummer  
                  END AS myNummer  
                  
                  

                  ungeprüft, in der komplexen Version von CASE geht das auf jeden Fall.
                  Wenn das nicht Dein Restproblem war, was ist es denn?

                  Freundliche Grüße

                  Vinzenz

                  1. Hallo Vinzenz,

                    ich ging davon aus, dass "was mir fehlte" bedeutete, dass es jetzt nicht mehr fehlt und Dein Problem gelöst sei.

                    ach herrje. So kann man das natürlich auffassen, stimmt.

                    Du kannst in ELSE selbstverständlich auch den Namen der überprüften Spalte verwenden:

                    ELSE b.Nummer

                    Wie findet man sowas heraus, wenn man es nicht weiß? Ich habe gestern den ganzen Tag daran herum gegoogelt, aber nichts gefunden.

                    ungeprüft, in der komplexen Version von CASE geht das auf jeden Fall.
                    Wenn das nicht Dein Restproblem war, was ist es denn?

                    Nein,genau das war es. Und ich habe es auch schon umgesetzt und es läuft einwandfrei!

                    Vielen Dank, Klaus