Hallo Michael,
Ich soll in einem Webshop für diverse Artikel (ca. 250 Stück) die Versandart ändern und will dies natürlich mit einer SQL-Abfrage machen.
Es gibt zwei betreffende Tabellen A und B. In Tabelle A stehen alle Artikel des Shops und in B stehen die erlaubten Versandarten pro Artikel.
wie kann man Tabellen A und B nennen? Diese sollten
- Artikel
- Versandarten
heißen. Dann kann man sich etwas darunter vorstellen.
Nun will ich aber nur die Artikel eines bestimmten Lieferanten ändern. Beide Tabellen haben die products_id gemeinsam. Daher habe ich folgende Abfrage erstellt:
SELECT B.products_id, B.shipping_type, B.allowed_types FROM B, A WHERE B.products_id = A.products_id AND A.manufacturers_id = 7 ORDER BY products_id;
Damit selektiert er mir in der Tabelle B nur die Artikel des einen Lieferanten. Nun kommt aber der Punkt an dem ich nicht weiterkomme. Wie kann ich nun mit einer UPDATE-Anweisung genau diese Datensätze auf einen Schlag ändern???
möchtest Du nun in der Tabelle Versandarten den Typ auf einen anderen Wert setzen? Ich kann mir den Inhalt nur sehr schwer vorstellen - und mein Statement könnte daher völlig falsch sein. Für Änderungen ist die UPDATE-Anweisung zuständig:
UPDATE
A Artikel -- geben wir dem Kind einen vernünftigen Namen
INNER JOIN -- ich mag explizite Join-Syntax
B Versandarten
ON Versandarten.products_id = Artikel.products_id
SET
Versandarten.allowed_types = <neuer wert>
WHERE
Artikel.manufacturers_id = 7 -- hoffentlich kapiert der Optimierer, dass
-- er nicht die ganze Tabelle A nehmen muss
/* alternativ könntest Du die WHERE-Klausel in die Join-Bedingung einbringen */
Damit ist für alle Artikel des entsprechenden Herstellers nur noch die neue
Versandart erlaubt. Wenn das in Deinem Sinne ist ...
Grundsätzlich empfehle ich Dir unsere Join-Artikel in SELFHTML aktuell:
Einführung in Joins
Fortgeschrittene Jointechniken
Eine Anmerkung zum Schluss:
Bei MySQL ist es immer empfehlenswert, die verwendete Version anzugeben, da
der Leistungsumfang und die Leistungsfähigkeit von MySQL enorm unterscheiden.
Freundliche Grüße
Vinzenz
PS: Vor dem Update unbedingt eine Sicherung der Datenbank erstellen!