Michael: Hilfe bei einer Abfrage

Hallo!

Da ich absolut nicht mehr weiterkomme versuche ich hier mal mein Glück.
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.

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???

Leider kenne ich mich nur rudimentär mit DB aus und stoße hier an meine Grenzen. Daher wäre ich über jede Anregung bzw. Hilfe dankbar!

Grüße

Michael

  1. Ach ja, falls wichtig: MySQL-Version ist 4.0

  2. 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!

    1. Hallo!

      wie kann man Tabellen A und B nennen? Diese sollten

      • Artikel
      • Versandarten

      heißen. Dann kann man sich etwas darunter vorstellen.

      Sorry, da hast Du natürlich Recht. Die haben eben so kryptisch lange Namen in Wirklichkeit, da wollte ich es nicht zu kompliziert machen.

      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:

      Du hast alles richtig verstanden und Dein Code funktioniert super! Vielen Dank dafür.

      Damit ist für alle Artikel des entsprechenden Herstellers nur noch die neue
      Versandart erlaubt. Wenn das in Deinem Sinne ist ...

      Absolut!

      Grundsätzlich empfehle ich Dir unsere Join-Artikel in SELFHTML aktuell:

      Einführung in Joins
      Fortgeschrittene Jointechniken

      Danke. Die werde ich mir mal in einer ruhigen Minute zu Gemüte führen.

      Nochmals vielen Dank für die schnelle Hilfe!

      Gruß

      Michael