Stefan: Text per SQL in viele Datenbankfelder zusätzlich einfügen

Hallo Leute,

ich hoffe, daß ich mal hier auf kompetente Hilfe stosse.

Ich habe in einer mysql-Datenbank eine Tabelle mit Namen products
In diser Tabelle ist ein Feld mit Namen products_model (da ist die Artikelnummer drin gespeichert). Diese Artikelnummer müssen nun erweitert werden. Und zwar müssen alle Artikel, welche zehnstellig sind eine führende 0 erhalten, und alle Artikel, die sechsstellig sind müssen am Ende um 0000 erweitert werden und am Anfang um 0. Welchen Befehl kann ich dafür in phpmyadmin verwenden? Wie ich die zehn- und sechsstelligen Felder anzeigen lassen kann weiß ich bereits:

SELECT * FROM products WHERE products_model LIKE '__________' (10-stellig) bzw.
SELECT * FROM products WHERE products_model LIKE '______' (6-stellig)

Wie bekomme ich aber nun die zusätzlichen Nullen in das jeweilige Feld?
Wäre schön, wenn mir jemand helfen könnte.

  1. Hallo Stefan,

    Ich habe in einer mysql-Datenbank eine Tabelle mit Namen products
    In diser Tabelle ist ein Feld mit Namen products_model (da ist die Artikelnummer drin gespeichert).

    welchen Datentyp besitzt dieses Feld? CHAR, VARCHAR oder ein Zahlentyp?

    Diese Artikelnummer müssen nun erweitert werden. Und zwar müssen alle Artikel, welche zehnstellig sind eine führende 0 erhalten, und alle Artikel, die sechsstellig sind müssen am Ende um 0000 erweitert werden und am Anfang um 0.

    Wie ich die zehn- und sechsstelligen Felder anzeigen lassen kann weiß ich bereits:
    SELECT * FROM products WHERE products_model LIKE '__________' (10-stellig) bzw.

    Unschön, MySQL besitzt so schöne Stringfunktionen, z.B:

    SELECT  
        products_model    -- nicht benötigte Felder weglassen  
                          -- SELECT * ist böse[tm]  
    FROM products  
    WHERE [link:http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#id2938645@title=CHAR_LENGTH] = 10
    

    Wenn Du nun diese Datensätze ändern möchtest, so verwendest Du die UPDATE-Anweisung:

    UPDATE  
        products                                      -- Welche Tabelle soll geändert werden  
    SET products_model = [link:http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#id2938772@title=CONCAT]('0', products_model)  -- Führende Null hinzufügen  
    WHERE [link:http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#id2938645@title=CHAR_LENGTH] = 10                            -- bei zehnstelligen Produktnummern
    

    Das Statement für die sechsstelligen Nummern solltest Du nun selbst hinbekommen. Eine Frage noch: Die sechsstelligen Nummern werden durch das Anhängen von vier Nullen ja zehnstellig. Bekommen diese dann noch eine führende Null oder bleiben die zehnstellig?

    Freundliche Grüße

    Vinzenz

    1. welchen Datentyp besitzt dieses Feld? CHAR, VARCHAR oder ein Zahlentyp?

      VARCHAR

      Unschön, MySQL besitzt so schöne Stringfunktionen, z.B:

      SELECT

      products_model    -- nicht benötigte Felder weglassen
                            -- SELECT * ist böse[tm]
      FROM products
      WHERE [link:http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#id2938645@title=CHAR_LENGTH] = 10

      
      >   
      > Wenn Du nun diese Datensätze ändern möchtest, so verwendest Du die [UPDATE](http://dev.mysql.com/doc/refman/5.0/en/update.html)-Anweisung:  
      >   
      > ~~~sql
      
      UPDATE  
      
      >     products                                      -- Welche Tabelle soll geändert werden  
      > SET products_model = [link:http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#id2938772@title=CONCAT]('0', products_model)  -- Führende Null hinzufügen  
      > WHERE [link:http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#id2938645@title=CHAR_LENGTH] = 10                            -- bei zehnstelligen Produktnummern
      
      

      Das Statement für die sechsstelligen Nummern solltest Du nun selbst hinbekommen. Eine Frage noch: Die sechsstelligen Nummern werden durch das Anhängen von vier Nullen ja zehnstellig. Bekommen diese dann noch eine führende Null oder bleiben die zehnstellig?

      Ja, diese bekamen auch noch die führende Null.
      Dank Deiner Hilfe habe ich es innerhalb von 2 Minuten hinbekommen. Vielen lieben Dank.
      Dass das mit CONCAT geht habe ich nirgends gefunden, obwohl ich wie ein blöder gesucht habe.

      Hach, ich könnte vor Freude in die Luft hüpfen, ich hb mich schon 3000 Artikel per Hand ändern sehen.

      Vielleicht kannst Du mir auch noch bei einem anderen Problem helfen:
      Wenn ich per phpmyadmin einen export mache, dann hängt er mir bei einigen Feldern ohne irgendeinen erkennbaren Grund wohl einen Zeilenumbruch an. Beziehungsweise bei einem Feld. In diesem Feld ist der Name der Bilddatei gespeichert. Dieses ist ein VARCHAR(64) Feld.

      So sieht ein richtig exportiertes Feld aus:
      "3";;"1";"1";"620491";"0";"3_0.jpg";"29.9080";"11.00";"0000-00-00 00:00:00";"2006-12-16 19:25:50";NULL;"0.00";"1";"1";"product_info_v1.html";"product_options_dropdown.html";"0";"15";"0";"1";"1";"0.5000";"0";"0";"0";"0";"0";"0"

      Und so ein Falsches:
      "5993";;"0";"2";"20000241100";"0";"20000241100.jpg
      ";"34.5271";"11.00";"0000-00-00 00:00:00";"2006-12-31 21:20:43";NULL;"0.00";"1";"1";"product_info_v1.html";"product_options_dropdown.html";"0";"0";"0";"0";"0";"0.0000";"0";"0";"0";"0";"0";"0"

      Hinter dem .jpg bricht er plötzlich bei der Export-Datei in eine neue Zeile um. Weißt Du vielleicht auch, woran das liegen könnte?

      Bis hierhin nochmals vielen Dank,
      Stefan

      1. echo $begrüßung;

        Wenn ich per phpmyadmin einen export mache, dann hängt er mir bei einigen Feldern ohne irgendeinen erkennbaren Grund wohl einen Zeilenumbruch an.

        Du solltest das genauer prüfen. Notfalls mit einem Hexeditor (z.B. im UltaEdit). Oftmals sind es nur die Editoren, die bei zu langen Zeilen einen Umbruch einfügen. Dieses Verhalten lässt sich jedoch oft umschalten.

        echo "$verabschiedung $name";

        1. Du solltest das genauer prüfen. Notfalls mit einem Hexeditor (z.B. im UltaEdit). Oftmals sind es nur die Editoren, die bei zu langen Zeilen einen Umbruch einfügen. Dieses Verhalten lässt sich jedoch oft umschalten.

          Hallo,

          danke für den Vorschlag, aber das ist es nicht. Bereits mit mehreren Programmen getestet.

          Hab nochmal den Export etwas verändert. Es werden ohne Ende Trennzeichen gesetzt. Wie kann denn so etwas passieren?

          Stefan

          1. echo $begrüßung;

            Du solltest das genauer prüfen. Notfalls mit einem Hexeditor (z.B. im UltaEdit). Oftmals sind es nur die Editoren, die bei zu langen Zeilen einen Umbruch einfügen. Dieses Verhalten lässt sich jedoch oft umschalten.
            danke für den Vorschlag, aber das ist es nicht. Bereits mit mehreren Programmen getestet.
            Hab nochmal den Export etwas verändert. Es werden ohne Ende Trennzeichen gesetzt. Wie kann denn so etwas passieren?

            Natürlich kann auch mal das phpMyAdmin Fehler machen, doch davon würde ich zunächst nicht ausgehen. Probier doch mal einen Export mit den Kommandozeilentools von MySQL. Ich tippe darauf, dass die Daten in der Tabelle bereits diese Whitespace-Zeichen enthalten. Du kannst auch mal eine Ausgabe SELECT feld, LENGTH(feld) FROM ... (bzw. CHAR_LENGTH()) machen, und schauen, ob die Länge mit der Anzahl der sichtbaren Zeichen übereinstimmt.

            echo "$verabschiedung $name";

            1. Natürlich kann auch mal das phpMyAdmin Fehler machen, doch davon würde ich zunächst nicht ausgehen. Probier doch mal einen Export mit den Kommandozeilentools von MySQL. Ich tippe darauf, dass die Daten in der Tabelle bereits diese Whitespace-Zeichen enthalten. Du kannst auch mal eine Ausgabe SELECT feld, LENGTH(feld) FROM ... (bzw. CHAR_LENGTH()) machen, und schauen, ob die Länge mit der Anzahl der sichtbaren Zeichen übereinstimmt.

              Problem gelöst: Ich habe einfach die entsprechenden Artikel mit phpmyadmin zum Bearbeiten aufgerufen und noch einmal ohne eine Veränderung auf Speichern gedrückt.

              Jetzt gehts.

              Vielen Dank an alle hier für die schnelle und unklomplizierte Hilfe.