Ankündigung

Einklappen
Keine Ankündigung bisher.

Update mehrerer Werte einer Spalte

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Update mehrerer Werte einer Spalte

    Ich möchte in einer bestimmte Spalte mehrere Werte auf einmal ändern. Dabei soll vorher geprüft werden in welcher Zeile ich mich gerade befinde um den richtigen Wert zuzuweisen.
    Ich habe das so versucht.

    PHP-Code:
    $Jan 20;
    $Feb 40;

    $update $connect_db->prepare("UPDATE `bilanzen_tab` SET `wert` = CASE
                                                        WHEN `bilanznahme` = `Januar` THEN :bindJanuar,
                                                        WHEN `bilanznahme` = `Februar` THEN :bindFebruar"
    );

        
    $update->bindValue(':bindJanuar'$Jan);       
        
    $update->bindValue(':bindFebruar'$Feb); 
    Kann man innerhalb eines SQl-Statements auf eine Bedingung prüfen? Habe ich vielleicht nur ein Syntaxfehler?
    Ich vermute das ich `bilanznahme` noch irgendwie in das Statement reinbasteln muss?

  • #2
    Hab das jetzt wie folgt geändert:
    PHP-Code:
     $update $connect_db->prepare("UPDATE `bilanzen_tab` SET `wert` = CASE `bilanznahme`
                                                        WHEN `bilanznahme` = `Januar` THEN :bindJanuar,
                                                        WHEN `bilanznahme` = `Februar` THEN :bindFebruar"
    );

        
    $update->bindValue(':bindJanuar'0);         
        
    $update->bindValue(':bindFebruar'0); 
    Bekomme leider immer noch die folgende Fehlermeldung:

    Array ( [0] => 42000 [1] => 1064 [2] => You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version
    for the right syntax to use near ' WHEN `bilanznahme` = `Februar` THEN '0'' at line 2 )

    Kommentar


    • #3
      Code:
      test=# create table dih(key int primary key, val text default null);
      CREATE TABLE
      test=*# copy dih (key) from stdin;
      Enter data to be copied followed by a newline.
      End with a backslash and a period on a line by itself, or an EOF signal.
      >> 1
      >> 2
      >> 3
      >> 4
      >> 5
      >> \.
      COPY 5
      test=*# select * from dih;
       key | val
      -----+-----
         1 |
         2 |
         3 |
         4 |
         5 |
      (5 rows)
      
      test=*# update dih set val = case when key = 1 then 'eins' when key = 2 then 'zwei' end where key in (1,2);
      UPDATE 2
      test=*# select * from dih ;
       key | val  
      -----+------
         3 |
         4 |
         5 |
         1 | eins
         2 | zwei
      (5 rows)
      
      test=*#
      vielleicht so?
      PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

      Kommentar


      • #4
        Das klappt irgendwie nicht. Ich hab das jetzt mal so geändert.

        PHP-Code:
        $update $connect_db->prepare("UPDATE `bilanzen_tab` SET
                                                        `wert` = (CASE WHEN `bilanznahme` = `Januar` THEN '0' end),
                                                        `wert` = (CASE WHEN `bilanznahme` = `Februar` THEN '0' end)"
        ); 
        Und bekomme jetzt diese Meldung: Array ( [0] => 42S22 [1] => 1054 [2] => Unknown column 'bilanznahme' in 'field list' )

        Die Spalte gibt es aber in der Datenbank... muss ich die noch irgendwie mit übergeben? bei der Update-Anweisung?

        Kommentar


        • #5
          Ich habe nun versucht mit einer verschachtelten Statement (UPDATE / SELECT) die Spalte mit abzufragen, aber klappt immer noch nicht

          PHP-Code:
          $update $connect_db->prepare("UPDATE `bilanzen_tab` SET `wert` = (SELECT `bilanznahme` from `bilanzen_tab`)
                                                          CASE
                                                               WHEN `bilanznahme` = `Januar` THEN '0'
                                                               WHEN `bilanznahme` = `Februar` THEN '0'
                                                          END;"
          ); 

          Kommentar


          • #6
            Ok hier noch ein Versuch mit Where-Klausel.

            PHP-Code:
            $update $connect_db->prepare("UPDATE `bilanzen_tab` SET `wert` =
                                                              CASE
                                                                 WHEN `bilanznahme` = `Januar` THEN '0'
                                                                 WHEN `bilanznahme` = `Februar` THEN '0'
                                                              END
                                                        WHERE `bilanznahme` in (`Januar`,`Februar`);"
            ); 
            Es kommt wieder die folgende Meldung: Array ( [0] => 42S22 [1] => 1054 [2] => Unknown column 'bilanznahme' in 'where clause' )

            Bei der Select-Anweisung macht man einfach Select * und alle Spalten werden übergeben. Wie kann ich denn das bei einer Update-Anweisung machen?

            Kommentar


            • #7
              Zitat von dih Beitrag anzeigen

              Bei der Select-Anweisung macht man einfach Select * und
              ... hat schlechten Programmierstil.


              Andreas

              PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

              Kommentar


              • #8
                Ich habe doch tatsächlich den Spaltennamen falsch geschrieben...

                PHP-Code:
                $update $connect_db->prepare("UPDATE `bilanzen_tab` SET `wert` =
                                                                  CASE
                                                                     WHEN `bilanzname` = `Januar` THEN '0'
                                                                     WHEN `bilanzname` = `Februar` THEN '0'
                                                                  END"
                ); 
                Nun bin ich einen Schritt wieder weiter. Allerdings kommt jetzt die folgende Fehlermeldung: Array ( [0] => 42S22 [1] => 1054 [2] => Unknown column 'Januar' in 'field list' )

                "Januar" und "Februar" sind bei mir keine Spalten sondern Werte in der Spalte "bilanzname"...

                Kommentar


                • #9
                  Zitat von dih Beitrag anzeigen
                  Ich habe doch tatsächlich den Spaltennamen falsch geschrieben...


                  "Januar" und "Februar" sind bei mir keine Spalten sondern Werte in der Spalte "bilanzname"...

                  Tja, hatte mich schon gewundert. Und ja: beschäftige Dich mit '´`" und so ...
                  PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                  Kommentar


                  • #10
                    Ach ja das auch noch. Die Maskierung der Zeichen... Mit ' ' klappt es. Danke

                    Kommentar


                    • #11
                      Ach nicht bilanznahme?! Wer hätte das gedacht... Mal ein Tip: lass sowas! Du tust dir damit kein gefallen. Wenn du mehrere Werte updaten willst, pack das in mehren Queries in eine Transaktion und gut ist. Der Query überschreibt dir sämtliche Datensätze in der Tabelle mit 0 bzw. null.


                      Kommentar


                      • #12
                        Einer Bilanz den Namen Januar zu geben ist ja auch für jeden einleuchtend, oder? Bilanzmonat evtl.?

                        Kommentar

                        Lädt...
                        X