Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Mehrere Einträge aktualisieren

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von Fabhino22Elz, 13 November 2013.

  1. Fabhino22Elz

    Fabhino22Elz Benutzer

    Hallo,

    wir haben eine Tabelle mit knapp 3000 Artikeln, welche Eindeutige IDs haben.

    Diese Artikel wollen wir nun "aktualisieren", indem wir ein aktuel leeres Feld befüllen wollen.

    Wir haben dafür von unserem Lieferanten eine CSV Datei, die alle Artikel IDs und eben die Daten für das leere Feld hat.

    Nun meine Frage - Lässt sich dieses Feld über den Import des PHP My Admins durchführen oder müssen wir im Shop jeden Artikel aufrufen und den Wert manuell eintragen?

    Leider kenne ich mich mit PHP nicht so gut aus, weswegen ich hier um Hilfe bitte.

    Ich hatte die Hoffnung es gibt einen Art SQL Befehl der sowas möglich macht.

    Bin für jede Hilfe dankbar!

    Grüße
     
  2. akretschmer

    akretschmer Datenbank-Guru

    weder noch.


    PHP != SQL. Schreibt man anders, klingt anders, ist was anderes.

    Was du willst geht in SQL so:

    Code:
    test=> select * from artikel ;
    artikel | val
    ---------+-----
          1 |  10
          2 |  20
          3 |  30
          4 |  40
          5 |  50
          6 |  60
    (6 rows)
    
    test=*> select * from csv ;
    artikel | val
    ---------+-----
          2 | 200
          4 | 400
    (2 rows)
    
    test=*> update artikel a set val = c.val from csv c where a.artikel=c.artikel;
    UPDATE 2
    test=*> select * from artikel ;
    artikel | val
    ---------+-----
          1 |  10
          3 |  30
          5 |  50
          6 |  60
          2 | 200
          4 | 400
    (6 rows)
    
    Also erst mal Deine CSV in eine neue Tabelle einlesen und dann wie gezeigt ein Update.
     
  3. ukulele

    ukulele Datenbank-Guru

    Mit PHP hat das nichts zu tun sondern eher mit MySQL. Es geht zunächst nur um den Zugriff unter SQL auf die CSV Datei, leider kann ich das nur unter MS SQL daher hier mal nur ein Link wie es gehen müsste:
    http://code.dedu.ch/2011/07/csv-file-direkt-in-mysql-importieren/

    Am besten du lädst deine Daten in eine Temporäre Tabelle und updatest dann die andere Tabelle.
     
  4. akretschmer

    akretschmer Datenbank-Guru

    genau, so wie von mir gezeigt. man könnte auch (unter PG) via Foreign Data Wrapper direkt via SQL auf eine .csv - Datei zugreifen, aber das kann der Fragesteller wohl eher nicht mit seinem MySQL.
     
  5. gurbelunder

    gurbelunder Datenbank-Guru

    Also die einfachste Variante mit MySQL und der Bedingung, dass das angesprochene Feld leer ist, würde so ungefähr aussehen:

    Code:
    update artikel a set leeres_feld = "dein Wert" where  leeres_feld IS NULL;
    
    Dies ist aber sicher auch abhängig vom Datentypen, den das Feld trägt.
     
  6. akretschmer

    akretschmer Datenbank-Guru


    Naja, sicherlich soll nicht jeder Artikel dann den selben Preis oder was auch immer haben, ...
     
  7. gurbelunder

    gurbelunder Datenbank-Guru

    Verstehe ich aber erstmal so, laut seiner Anfrage.

    Fakt ist, um ein Update Statement durchführen zu können, braucht man entweder einen Vergleichswert der mit WHERE angegeben wird, oder man aktualisiert alle Datensätze mit dem selben Wert, indem man die WHERE Klausel weg lässt. So zumindest die Grundlage...
     
  8. akretschmer

    akretschmer Datenbank-Guru

    Diese war: "Wir haben dafür von unserem Lieferanten eine CSV Datei, die alle Artikel IDs und eben die Daten für das leere Feld hat."

    Aber sicherlich sagt der TE noch was dazu ...
     
  9. gurbelunder

    gurbelunder Datenbank-Guru

    Ich meinte dies hier ;)
     
  10. Fabhino22Elz

    Fabhino22Elz Benutzer

    Hallo,

    vielen Dank für Eure Antworten!

    Natürlich meine ich das ich mich in SQL nicht so wirklich gut auskenne (In PHP aber auch nicht :-D )

    Es geht um 3000 Artikel, bei welchen in das leere Feld anhand der ID's das entsprechende Feld aus der CSV eingetragen werden soll.

    Also z.b.

    ID feld
    1 123
    2 597
    3 549
    4 1319
    5 132

    Ich müsste als einfach eine leere Tabelle anlegen die z.b. Daten heißt, dort die CSV importieren, und dann mit dem Befehl von akretschmer das ganze für die komplette Tabelle machen?

    Nun jedch die Frage - Wie muss ich den befehl erweitern? jede ID und jeden Zellenwert dort einfügen?

    Danke :)
     
  11. ukulele

    ukulele Datenbank-Guru

    Ja. - Erstmal eine Tabelle anlegen mit der ID Spalte und der Spalte für den Wert (passende Datentypen beachten). Dann die Informationen aus der CSV darein. Der Rest ist ein banaler Befehl siehe

    update artikel a set val = c.val from csv c where a.artikel=c.artikel

    natürlich mit den richtigen Spalten und Tabellennamen.
     
  12. Fabhino22Elz

    Fabhino22Elz Benutzer

    Hallo,

    ich habe nun versucht die CSV (aus Excel 2007 gespeichert) via php my admin zu importieren.

    Bekomme aber immer nur die Fehlermeldung hier:

    Ungültige Anzahl an Spalten im CSV-Import in Zeile 1.

    Ich habe die CSV mal angehängt.

    Woran kann das liegen?

    Kann mir da jemand helfen?

    Grüße
     

    Anhänge:

  13. akretschmer

    akretschmer Datenbank-Guru

    ich seh da nur eine lange Zeile ...
     
  14. Fabhino22Elz

    Fabhino22Elz Benutzer

    Wie kann ich das den verhindern? wenn ich das in notepad öffne zeigt er alles untereinander, die beiden spalten sind durch ein komma getrennt. Nach dem zweiten Eintrag vor dem Zeilenumbruch zeigt er jedoch nix. ich zeigs mal hier:


    483215;0.176
    483216;0.258
    505752;0.154
    505740;0.128
    505742;0.146
    505747;0.170
    451241;1.910
    451242;2.425
    451250;0.870
    451251;1.135
    451252;1.310
    451371;1.565
    451372;2.085
    451382;1.200
    451386;1.870
    451384;1.760
    452279;2.120
    452364;1.700
    454347;1.300
    454348;1.400


    Muss da noch was dahin damit der phpmyadmin beim sql import weiß es ist ne neue Zeile?

    Danke für deine Hilfe bisher!
     
  15. Fabhino22Elz

    Fabhino22Elz Benutzer

    Hallo,


    der import hat funktioniert,

    nun aber zum sql befehl.

    ich möchte das erst testen, deswegen habe ich die datenbank kopiert. nun wollte ich folgenden befehl ausführen:

    UPDATE `s_articles_details_sicherung` SET `weight`=`weight` from `gewichtimport` where `ordernumber`=`ordernumber`

    bekomme aber folgenden Fehler:

    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from `gewichtimport` where `ordernumber`=`ordernumber`' at line 1
    Woran liegt das nun wieder?

    Kann mir dabei noch jemand helfen? dann wäre das Problem erledigt :)
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden