Mehrere Einträge aktualisieren

Fabhino22Elz

Benutzer
Beiträge
17
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
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.532
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?

weder noch.

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


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.
 

akretschmer

Datenbank-Guru
Beiträge
9.532
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.

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.
 

gurbelunder

SQL-Guru
Beiträge
136
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.
 

akretschmer

Datenbank-Guru
Beiträge
9.532
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.


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

gurbelunder

SQL-Guru
Beiträge
136
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...
 

Fabhino22Elz

Benutzer
Beiträge
17
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 :)
 

ukulele

Datenbank-Guru
Beiträge
4.647
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?
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.
 

Fabhino22Elz

Benutzer
Beiträge
17
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

  • s_articles_details.zip
    13,5 KB · Aufrufe: 1

Fabhino22Elz

Benutzer
Beiträge
17
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!
 
Werbung:

Fabhino22Elz

Benutzer
Beiträge
17
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 :)
 
Oben