Streusel: Produkte mit nur einem Lieferanten

Hallo,

ich habe eine MySQL Tabelle, wo die Preise mehrerer Lieferanten reinlaufen. Diese Preise sind jeweils mit unseren Produkten (product_id) konsolidiert. Beispiel:

id | product_id | lieferant | preis
1     205         xxx         12.10
2     2340        yyy         24.60
3     24          zzz         19.00
4     205         zzz         11.90
5     3400        xxx         15.10
6     9999        kkk         18.30
...

Ein Produkt kann es also von mehreren Lieferanten bezogen werden. Wenn ein Produkt bei einem Lieferanten nicht mehr lieferbar ist, fliegt es automatisch aus der Tabelle. Nun geht es mir darum herauszufinden, welche Lieferanten jeweils wie viele Produkte anbieten, die keiner der anderen Lieferanten anbietet. Bei uns gibt es 4 verschiedene Lieferanten und die Tabelle hat ca. 25.000 Zeilen.

Ich habe absolut keine Idee, wie die Abfrage funktioniereren. Ich könnte zwar für jeden Lieferanten alle Produkte durchgehen und dann Fragen ob dieses Produkt noch andere Lieferanten führen. Das wären aber auch im schnitt 20.000 Abfragen. Ich hoffe da gibt es einen besseren Weg.

Streusel

  1. Hallo

    ich habe eine MySQL Tabelle, wo die Preise mehrerer Lieferanten reinlaufen. Diese Preise sind jeweils mit unseren Produkten (product_id) konsolidiert. Beispiel:

    id | product_id | lieferant | preis
    1     205         xxx         12.10
    2     2340        yyy         24.60
    3     24          zzz         19.00
    4     205         zzz         11.90
    5     3400        xxx         15.10
    6     9999        kkk         18.30
    ...

    Ein Produkt kann es also von mehreren Lieferanten bezogen werden. Wenn ein Produkt bei einem Lieferanten nicht mehr lieferbar ist, fliegt es automatisch aus der Tabelle. Nun geht es mir darum herauszufinden, welche Lieferanten jeweils wie viele Produkte anbieten, die keiner der anderen Lieferanten anbietet.

    Du suchst Dir zunächst die Produkte, die genau einen Lieferanten haben:

      
    SELECT                    -- Gib mir  
        product_id            -- die ID der Produkte  
    FROM                      -- aus  
        tabelle               -- meiner Tabelle  
    GROUP BY                  -- aufgeschlüsselt nach  
        product_id            -- den IDs  
    HAVING                    -- für die es  
        COUNT(lieferant) = 1  -- genau einen Lieferanten gibt.  
    
    

    Nun möchtest Du wissen, wieviele solche Produkte jeder Lieferant anbietet:
    Dazu gruppierst Du nach Lieferanten, zählst deren Anzahl, wobei Du eben nur die Produkte berücksichtigst, die nur einen Lieferanten haben:

      
    SELECT                        -- Gib mir  
        lieferant,                -- die Lieferanten und  
        COUNT(lieferant) anzahl   -- die Anzahl ihres Auftretens  
    FROM                          -- in  
        tabelle                   -- der Produkt-Lieferanten-Tabelle  
    WHERE                         -- wobei nur die  
        product_id IN (           -- Produkte berücksichtigt  
        SELECT                    -- werden,  
            product_id            --  
        FROM                      --  
            tabelle               --  
        GROUP BY                  --  
            product_id            --  
        HAVING                    -- für die es  
            COUNT(lieferant) = 1  -- genau einen Lieferanten gibt.  
    )  
    GROUP BY                      -- aufgeschlüsselt  
        lieferant                 -- nach den verschiedenen Lieferanten  
    
    

    Ein einfaches Subselect (ab MySQL 4.1) sollte es also tun.

    Freundliche Grüße

    Vinzenz