Produkte mit nur einem Lieferanten
Streusel
- datenbank
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
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