Kerstin R.: Updatee MySQL Tabelle

Guten Abend,

ich habe eine MySQL Preis - Tabelle die hat derzeit Aufgrund schlechtem Aufbau ca. 26.000 Einträge.

Für eine Oster - Aktion möchte ich gerne den Preis ändern und den alten Preis in eine extra Spalte schreiben.

Mein PHP Script bricht ab bzw. läuft und läuft und läuft und irgendwann bleibt der Browser hängen. All-Inkl. meine ich müsste das Script aufteilen um weniger Einträge zu haben bzw. die Zeit zu verkürzen. Also wieder sehr viel Aarbeit für eine sehr alte Tabelle.

Jetzt habe ich erfahren, man kann Berechnungen auch direkt in einer MySQL Tabelle vornehmen? Dieses würde auch um einiges schneller gehen? Nur wie stelle ich dieses an?

Die Preistabelle hat diesen Aufbau

  • id (int(11))
  • preis (varchar(50))
  • rubrik (varchar(2))
  • preis_kopie (varchar(50))

Der Preis in der Spaltet z.B. lautet 7,51

Ist mein Vorhaben überhaupt so ohne eine PHP Seite möglich? Ich kenne ich nur sehr wenig mit diesen Sachen aus.

  1. Hallo Kerstin R.,

    Jetzt habe ich erfahren, man kann Berechnungen auch direkt in einer MySQL Tabelle vornehmen? Dieses würde auch um einiges schneller gehen? Nur wie stelle ich dieses an?

    Ist mein Vorhaben überhaupt so ohne eine PHP Seite möglich? Ich kenne ich nur sehr wenig mit diesen Sachen aus.

    Du könntest mit einer graphischen Umgebung wie phpmyadmin oder adminer an (einer Sicherheitskopie!) der Datenbank Änderungen vornehmen ohne über wirklich tiefgreifende Kenntnisse in PHP oder SQL verfügen zu müssen. Die Gefahr, etwas kaputt zu machen, ist natürlich immer noch da.

    Bis demnächst
    Matthias

    --
    Rosen sind rot.
    1. Hello,

      Du könntest mit einer graphischen Umgebung wie phpmyadmin oder adminer an (einer Sicherheitskopie!) der Datenbank Änderungen vornehmen ohne über wirklich tiefgreifende Kenntnisse in PHP oder SQL verfügen zu müssen. Die Gefahr, etwas kaputt zu machen, ist natürlich immer noch da.

      Und wenn Du an der Tabelle nie mehr als eine Änderung gleichzeitig durchführen lässt, ist die Gefahr, dass etwas schief geht, minimiert.

      Du lässt die beschriebenen Aufgaben also bitte alle von der Datenbank erledigen und nicht etwa von deiner eigenen PHP-API.

      Liebe Grüße
      Tom S.

      --
      Es gibt nichts Gutes, außer man tut es
  2. Tach!

    Jetzt habe ich erfahren, man kann Berechnungen auch direkt in einer MySQL Tabelle vornehmen? Dieses würde auch um einiges schneller gehen? Nur wie stelle ich dieses an?

    1. Daten sichern
    2. Neues Feld hinzufügen
    3. UPDATE SET neues_Feld = preis WHERE wenn_notwendig
    4. UPDATE SET preis = preis * rabatt WHERE wenn_notwendig

    Die Preistabelle hat diesen Aufbau

    • id (int(11))
    • preis (varchar(50))
    • rubrik (varchar(2))
    • preis_kopie (varchar(50))

    Na das ist mal ganz ungünstig. Preise sollten in Decimal-Feldern gespeichert werden, denn als Zeichenfolge kann man nur sehr schlecht mit ihnen rechnen.

    Der Preis in der Spaltet z.B. lautet 7,51

    Das ist kein Preis, das ist ein String. 7.51 wäre ein Preis. Das Formatieren für die deutsche Schreibweise kann man in PHP vornehmen.

    Ist mein Vorhaben überhaupt so ohne eine PHP Seite möglich?

    Ja.

    Ich kenne ich nur sehr wenig mit diesen Sachen aus.

    Deswegen Schritt 1: Daten sichern vor dem Probieren.

    dedlfix.

    1. Guten Abend,

      1. Daten sichern

      Erledigt:
      Tabelle d144e3f1.preise wurde nach d144e3f1.preise_SICHERUNG kopiert.

      1. Neues Feld hinzufügen

      Erledigt:
      alter_preis (varchar(50))

      1. UPDATE SET neues_Feld = preis WHERE wenn_notwendig

      Erledigt:
      UPDATE preise SET alter_preis = preis WHERE kategorie = 30

      Nachfrage:
      Über AND kann ich weitere Kategorien anhängen oder ist es besser, Kategorien auszuschließen, wenn dieses überhaupt möglich ist?

      1. UPDATE SET preis = preis * rabatt WHERE wenn_notwendig

      Hier bin ich jetzt erst vorsichtiger und möchte gerne nochmals nachfragen:

      PHP z.B. kann nur rechnen, wenn ich aus 7,56 7.56 mache. Dann kann ich um einen Rabatt von 20% zu geben mit 7.56*0.8 rechnen. Kann ich denn in der MySQL Datenbank mit einem , rechnen oder muss ich zuvor das Komme in einen Punkt ändern? Wenn ja, wie könnte ich dieses umsetzten und nach dem Update müsste ich dann aus dem Punkt wieder ein Komma machen. Ich weiß alles nicht perfekt aber einmal muss ich da wohl noch durch.

      Na das ist mal ganz ungünstig. Preise sollten in Decimal-Feldern gespeichert werden, denn als Zeichenfolge kann man nur sehr schlecht mit ihnen rechnen.

      Ich weiß. Vor ca. 5 Jahren war ich einfach noch nicht so weit. Damals habe ich alles als varchar gespeichert, bis auf die ID, diese hat int. Bin auch schon dabei dieses Projekt komplett neu aufzubauen, geht leider nicht von jetzt auf gleich, da ich Hauptberuflich noch einen anderen Job habe.

      Das ist kein Preis, das ist ein String. 7.51 wäre ein Preis. Das Formatieren für die deutsche Schreibweise kann man in PHP vornehmen.

      In der neuen Tabelle wird dieses in der Zukunft auch so sein.

      1. Tach!

        UPDATE preise SET alter_preis = preis WHERE kategorie = 30

        Nachfrage:
        Über AND kann ich weitere Kategorien anhängen oder ist es besser, Kategorien auszuschließen, wenn dieses überhaupt möglich ist?

        Kaum. Da immer nur ein Eintrag in kategorie stehen kann, kann es nicht wahr werden, dass ein Artikel in Kategorie x UND y enthalten ist. Du suchst eher Einträge der Kategorie x OR der Kategorie y.

        1. UPDATE SET preis = preis * rabatt WHERE wenn_notwendig Hier bin ich jetzt erst vorsichtiger und möchte gerne nochmals nachfragen:

        PHP z.B. kann nur rechnen, wenn ich aus 7,56 7.56 mache. Dann kann ich um einen Rabatt von 20% zu geben mit 7.56*0.8 rechnen. Kann ich denn in der MySQL Datenbank mit einem , rechnen oder muss ich zuvor das Komme in einen Punkt ändern?

        Man kann nur mit Zahlen rechnen, nicht mit Strings.

        Wenn ja, wie könnte ich dieses umsetzten und nach dem Update müsste ich dann aus dem Punkt wieder ein Komma machen. Ich weiß alles nicht perfekt aber einmal muss ich da wohl noch durch.

        Ohne auf ein Zahlenformat umzustellen, braucht es einen Typecast, bevor du rechnen kannst. Und davor noch eine Zeichenersetzung von Komma nach Punkt.

        dedlfix.

        1. Guten Abend,

          Ok, danke für deine Antwort. Dann lass ich den letzten Schritt mit dem Rabatt über eine PHP Datei laufen. Da kann ich aus dem , ein . machen.

          1. Hallo,

            Dann lass ich den letzten Schritt mit dem Rabatt über eine PHP Datei laufen. Da kann ich aus dem , ein . machen.

            Ja mach das, aber gib die Info bitte auch an Kerstin R. weiter!

            Gruß
            Kalk