Announcement

Collapse
No announcement yet.

MySQL Spalten verketten; verbinden; verknüpfen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • MySQL Spalten verketten; verbinden; verknüpfen

    Hallo zusammen,

    ich bin am verzweifeln, ich hoffe Ihr könnt mir helfen.

    Ich muss für eine MySQL Datenbank folgendes einrichten:

    Wenn in der einen Spalte Frau steht, soll in eine andere automatisch geehrte und wenn Herr drin steht automatisch geehrter eingefügt werden. Wär toll wenn mir einer helfen kann =)

    Specialops

  • #2
    Originally posted by specialops View Post
    Hallo zusammen,

    ich bin am verzweifeln, ich hoffe Ihr könnt mir helfen.

    Ich muss für eine MySQL Datenbank folgendes einrichten:

    Wenn in der einen Spalte Frau steht, soll in eine andere automatisch geehrte und wenn Herr drin steht automatisch geehrter eingefügt werden. Wär toll wenn mir einer helfen kann =)

    Specialops

    Falscher Ansatz, weil das redundant wäre. Besser: das im Select regeln:

    Code:
    test=*# select * from specialops ;
      t
    ------
     Mann
     Frau
    (2 rows)
    
    test=*# select case when t = 'Mann' then 'Sehr geehrter' else 'Sehr geehrte' end from specialops ;
         case
    ---------------
     Sehr geehrter
     Sehr geehrte
    (2 rows)
    Andreas

    Comment


    • #3
      Wäre es nicht sinnvoller, die Texte in eine extra Tabelle zu legen und auf diese zu verweisen? Bei jedem select extra dieses when ist dann nicht zu performancelastig?
      Christian

      Comment


      • #4
        Originally posted by Christian Marquardt View Post
        Wäre es nicht sinnvoller, die Texte in eine extra Tabelle zu legen und auf diese zu verweisen? Bei jedem select extra dieses when ist dann nicht zu performancelastig?
        Jupps, auch denkbar.

        Andreas

        Comment


        • #5
          Originally posted by Christian Marquardt View Post
          Wäre es nicht sinnvoller, die Texte in eine extra Tabelle zu legen und auf diese zu verweisen? Bei jedem select extra dieses when ist dann nicht zu performancelastig?
          Ich vermute, dass "when" eher schneller ist, Tendenz in diesem Szenario schlechtesten Falls mehr oder weniger egal.
          Performanceprobleme bekommt man doch traditionell, je mehr Tabellen zugegriffen werden, sortiert, gruppiert ..

          Das "When" ist dagegen nur ein bisschen "Kopfrechnen" für den Server. Es bietet sich von der Struktur her natürlich vor allem für ad hoc Abfragen an.

          Die Tabellen-Variante dann lieber richtig normalisiert mit ordentlichem PK für Geschlecht und Nachschlagewerten für Kurzanrede sowie diverse Langformen.
          Gruß, defo

          Comment


          • #6
            Danke für eure Antworten,

            ich habe es auch mit "WHEN" versucht, weil das leichter ist. Leider bin ich zu unwissend um den code selbst zu schreiben =(

            Wenn mir einer den kompletten Code posten könnte, wäre ich extrem Dankbar.

            Die Datenbank schimpft sich "Kundendatenbank" und es geht um die Felder "Anrede" und "geehrte"

            Danke für eure Hilfe

            Comment


            • #7
              Andreas hatte schon geschrieben:
              Originally posted by akretschmer View Post
              Falscher Ansatz, weil das redundant wäre. Besser: das im Select regeln:
              Code:
              select (case 
                     when Anrede = 'Herr' then 'Sehr geehrter' 
                     else 'Sehr geehrte' 
                     end )
                from specialops ;
              Andreas
              Wenn du das unbedingt in eine eigene Spalte schreiben willst, dann passt dieses CASE genauso in einen UPDATE-Befehl. (Ich habe es formatiert und deine Namen übernommen, damit der Aufbau noch deutlicher ist.) Weil das aber gegen die Regeln der Normalisierung verstößt, ist es unwahrscheinlich, dass du hier eine fertige Lösung erhältst.

              Es gibt nämlich weiterer Probleme: Es ist ein einmaliger einfacher UPDATE-Befehl, mit dem in alle vorhandenen Datensätze aus Herr/Frau die Briefanrede mit und ohne 'r' erzeugt und gespeichert werden kann. Und was willst du bei künftigen Neuaufnahmen machen? Da sollte es wenigstens ein Trigger sein, der das genauso automatisch macht; dessen Code sieht natürlich anders aus. Und später kommt eine Organisation, die ihre Mitglieder mit "Liebe" anspricht. Und es kommt eine Adresse mit "Firma", und und und.

              Also glaub es uns, dass die doppelte Speicherung nicht sinnvoll ist. Jürgen

              Comment


              • #8
                Hallo,
                Originally posted by specialops View Post
                ... Leider bin ich zu unwissend um den code selbst zu schreiben =(
                Wenn mir einer den kompletten Code posten könnte, wäre ich extrem Dankbar.
                Heisst "unwissend" jetzt doch eher "zu faul"!? Lesen kannst du doch bestimmt! Z.B. im MySQL-Handbuch oder eben einfach das Beispiel von Andreas. Was ist daran zu kompliziert, als dass man es nicht auf die eigenen Gegebenheiten anpassen könnte?

                Sorry, dieses Forum versteht sich als Hilfe für ENTWICKLER und nicht als Dienstleistungs- oder Erledigungsservice!

                Gruß Falk
                Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                Comment


                • #9
                  Nein Unwissend heisst Unwissend! ich habe mir gestern Nacht bis um drei die Zähne daran ausgebissen und jedes Forum und Handbuch abgeklappert das ich gefunden habe! Nur finde ich zu diesem speziellen Thema leider gar nichts.
                  Es wäre wirklich nett wenn mir jemand helfen könnte.

                  Danke

                  Comment


                  • #10
                    Originally posted by specialops View Post
                    Nur finde ich zu diesem speziellen Thema leider gar nichts.
                    Das hat (mindestens) zwei Gründe. In der Regel wird in Handbüchern, Büchern, Foren usw. nicht genau das Thema behandelt, das in einer konkreten Frage auftritt. Ein Anwender ist (fast) immer gezwungen, die gegebenen Hilfen auf sein spezielles Thema zu übertragen. Außerdem hast du bisher 4x den Hinweis bekommen, dass diese Art der Speicherung nicht sinnvoll ist; also warum sollte irgendjemand irgendwo bei einem nicht sinnvollen Vorgehen zu "diesem speziellen Thema" eine Lösung bringen?!

                    Originally posted by specialops View Post
                    Es wäre wirklich nett wenn mir jemand helfen könnte.
                    Du hast trotzdem seit heute 7 Uhr (GMT) Vorschläge bekommen - für SELECT und UPDATE sowie TRIGGER - und dazu den Hinweis auf die MySQL-Referenz. Bevor du hier weiter jammerst, was wir alles für Stießel sind, die nicht wirklich helfen wollten, solltest du die Vorschläge umsetzen. Wenn du an einer bestimmten Stelle nicht weiter kommst, darfst du gerne deinen Versuch vortragen und beschreiben, was warum nicht funktioniert hat. Aber nicht so... Jürgen.

                    Comment


                    • #11
                      Danke für eure Hilfe, das weiß ich auch echt zu schätzen, mein Problem ist nur, dasich mit so einzelnen Begriffen nichts anfangen kann. Ich bin nicht vom Fach ich hab sowas nie gelernt. Mein Fachgebiet ist ein anderes- Daher klinge ich so verzweifelt.
                      Ich hab bisher alles in der Datenbank hinbekommen was ich wollte. Nur das fehlt eben noch.
                      Der Trigger klingt wirklich gut, es werden auch keine weiteren Anreden dazukommen, da es ausschließlich einzelne Privatkunden sind. Somit ist mit Herr und Frau alles abgedeckt. Auch Familie oder lieber wird nicht vorkommen.

                      Eine letzte Bitte noch:
                      ist es möglich ein konstrukt mit UPDATE und TRIGGER zu posten? So das ich mir das zusammenbasteln kann? Das wäre echt nett.

                      Danke an alle "Stießel"

                      PS: Das Konstrukt mit Select (case..) habe ich versucht, als Antwort kam: Parse error: syntax error, unexpected T_CASE, expecting ')'

                      Comment


                      • #12
                        So, dann poste doch mal Dein falsches "Select Case Construct " mit Fehlermeldung und Dir wird sicher jemand helfen.
                        Gruß, defo

                        Comment


                        • #13
                          Originally posted by defo View Post
                          So, dann poste doch mal Dein falsches "Select Case Construct " mit Fehlermeldung und Dir wird sicher jemand helfen.
                          Code:
                          <?php
                          select (case 
                                 when Anrede = 'Herr' then 'geehrter' 
                                 else 'geehrte' 
                                 end)
                            from $Kundenstamm2;
                          ?>
                          Fehlermeldung: Parse error: syntax error, unexpected T_CASE, expecting ')' in /kundebearbeiten.php on line 50
                          Zuletzt editiert von specialops; 16.01.2013, 15:57.

                          Comment


                          • #14
                            Ich hab hier kein laufendes MySQL, nur ein Handbuch unter
                            http://dev.mysql.com/doc/refman/5.1/...statement.html

                            zur Verfügung. Oder hier:
                            http://dev.mysql.com/doc/refman/5.1/...functions.html

                            Von einem Gleichheitszeichen steht da nichts in der Case Syntax.
                            Gruß, defo

                            Comment


                            • #15
                              Im Handbuch (inzwischen 3 Links dorthin) findest du die korrekte Schreibweise; so genau hatte ich auch nicht hingesehen:
                              Code:
                              <?php
                              select (case Anrede
                                     when 'Herr' then 'geehrter' 
                                     else 'geehrte' 
                                     end)
                                from $Kundenstamm2;
                              ?>
                              Eventuell sind andere Anführungszeichen nötig; da komme ich bei MySQL immer noch durcheinander; und wenn es dann noch in php eingebunden wird...

                              Jürgen

                              Nachtrag: Die Variante mit Gleichheitszeichen sollte genauso funktionieren. Möglicherweise liegt es an falschen Anführungszeichen oder an einer fehlenden Klammer.
                              [highlight=sql]select (case
                              when (Anrede = 'Herr') then 'geehrter'
                              else 'geehrte'
                              end)
                              from $Kundenstamm2;[/highlight]
                              Zuletzt editiert von Jürgen Thomas; 16.01.2013, 16:59. Reason: Nachtrag

                              Comment

                              Working...
                              X