Announcement

Collapse
No announcement yet.

Spalten in einer Tabelle löschen wenn die Felder keine Werte enthalten

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

  • Spalten in einer Tabelle löschen wenn die Felder keine Werte enthalten

    Hallo zusammen,

    wir bekommen von einem Hersteller Artikeldaten als CSV Datei. Der Hersteller schickt uns für jeden Geschäftsbereich eine CSV Datei mit Artikeldaten.

    Die CSV Dateien lesen wir ein und generieren Daraus eine Tabelle in der SQL DB. Die Felder werden dabei 1:1 benannt und angelegt. Die Felder in den Tabellen
    sind nicht identisch. In einer CSV können andere, sowie Felder mit gleicher Bezeichnung stehen. Zum Beispiel gibt es in allen Tabellen das Feld EAN aber nicht das Feld
    GROESSE. Bei einlesen wird geprüft ob es ein Feld mit der Bezeichnung schon gibt, wenn nicht wird es angelegt.

    Das Problem ist, das es extrem viele Felder gibt. in der Summe über 1024, und da sagt mein Script das es keine Felder mehr anlegen kann. Viele Tabellenspalten
    enthalten aber keine Werte. Die möchte ich während oder nach dem Anlegen der Tabellenspalten löschen.

    Derzeit funktioniert es so:

    Nimm CSV 1 => schau mal welche Felder es gibt => lege diese Felder in eine SQL Tabelle an
    Nimm CSV 2 => schau mal ob es neue Felder gibt => lege diese Felder an, den Rest überspringen
    Nimm CSV 3 .... wie CSV 2

    Gibt es eine SQL Anweisung die immer nach dem einlesen prüft ob es Spalten gibt die keine Werte hat?

    Gruß Nevada


  • #2
    Nein, zudem ist zu prüfen, was "kein Wert" ist. Ein NULL oder Leerzeichen o.a.
    Auch ist mir der Unterschied zwischen CSV1 und CSV2 nicht klar.
    Letztlich müsste man je Spalte ein select distinct machen, um zu prüfen ob mehr als 1 Wert drin ist und ggf. diese Spalte löschen.
    Das würde aber erst gehen, wenn die Tabelle befüllt ist, denn dann kann man testen, ob die Spalte Werte enthält.
    Wie das gehen soll wäre mir unklar. Um alle Daten in die Tabelle zu schreiben, sind ja erstmal alle Spalten erforderlich.
    Ausgenommen du findest einen Weg, schon vorher festzustellen, ob eine Spalte gefüllt ist
    Christian

    Comment


    • #3
      Danke für die Antwort.
      Der Unterschied zwischen den CSV Dateien ist, das die Felder nicht alle identisch sind.

      Beispiel Du hast eine CSV Datei mit Artikeldaten von Schuhen und eine CSV Datei mit Artikeldaten von Büchern.
      Diese sollst Du in eine Tabelle zusammenfassen.

      In beiden CSV Dateien gibt es das Feld EAN, aber bei Schuhen gibt es das Feld Größe welches es in der CSV Datei der Bücher nicht gibt, da gibt
      es das Feld Autor, was es wiederum nicht in der CSV Schuhe gibt.

      Am Ende soll es in der finalen Tabelle die Felder EAN, Größe und Autor geben.

      Mein erster Ansatz war alle Daten der CSV 1 in eine Tabelle zu schreiben und zu schauen ob es Spalten gibt in der alle Zeilen dieser keine Werte enthalten.

      Vielleicht klappt das aber an einer anderen Stelle. Ich lese die CSV Datei in ein Array. Kann man hier ermitteln wenn der selbe Key im Array keinen Wert hat bzw. leer ist?

      Comment


      • #4
        Beispiel

        Array
        (
        [0] => Array
        (
        [EAN] => 1234567889
        [Autor] => Meier
        [Groesse] =>
        )
        [1] => Array
        (
        [EAN] => 987654321
        [Autor] => Schulz
        [Groesse] =>
        )
        )

        1. Wie kann ich prüfen ob der Key Größe immer leer ist in dem Array?
        2. Wenn der Key Groesse immer leer ist, wie lösche ich alle Keys Groesse?

        Comment


        • #5
          Sofern es PHP ist
          Arrayelement löschen mit unset
          Prüfen auf leer
          $arr = array('a' => NULL);
          var_dump(array_key_exists('a', $arr)); // --> TRUE
          var_dump(isset($arr['a'])); // --> FALSE
          Christian

          Comment


          • #6
            Und jetzt mal ganz blöde gefragt: was war nochmal der Grund, dass Du alle CSV in eine Tabelle füllst? Man kann die Datei auch in jeweils eine Tabelle laden und die Daten bei Bedarf zusammen führen. Das hat auch einige Performance Vorteile. Du kannst die Unterschiede zwischen den Tabellen auch durch Abfragen der Systemtabellen Abfragen.

            Comment

            Working...
            X