mysql: GROUP BY in Kombination mit ORDER BY
AK
- datenbank
Hallo!
Ich habe 2 (für dieses Problem relevante) Tabellen für eine Art Auktionssystem. Eine enthält alle Gebote zu einer Auktion, die andere enthält die Bieter (dealers).
Ich möchte jetzt eine Liste über die jeweils *niedrigsten Gebote* jedes Bieters. Dabei möchte ich jeden Bieter nur einmal.
Die Query sieht im Moment so aus:
SELECT d.dealer_id, b.bid_value FROM bids b, dealers d WHERE d.dealer_id = b.bid_bidder GROUP BY d.dealer_id ORDER BY b.bid_value
Wenn ich jetzt folgende Daten habe:
1. bid_bidder 1 -> bid_value = 700
1. bid_bidder 2 -> bid_value = 500
2. bid_bidder 1 -> bid_value = 300
Dann gibt mir die Query das jeweils erste Gebot (700 für bid_bidder 1) an und nicht das niedrigste (300). Warum? Eine Anfrage mit "DISTINCT" funktioniert auch nicht, da die bid_values ja jedes mal anders sind.
Momentan umgehe ich das Problem, indem ich das niedrigste Gebot in einer PHP-Schleife nach der Query finde, aber ich hätte gern eine saubere Antwort.
Danke im Vorraus. :)
Anton
Kennzeichne dein Bietfeld mit der Eigenschaft MIN(). Also:
SELECT d.dealer_id, MIN(b.bid_value) FROM bids b INNER JOIN dealers d ON d.dealer_id = b.bid_bidder GROUP BY d.dealer_id ORDER BY b.bid_value
Den Join würde ich auch so umsetzen.
Viele Grüße.
Hello,
SELECT d.dealer_id, b.bid_value FROM bids b, dealers d WHERE d.dealer_id = b.bid_bidder GROUP BY d.dealer_id ORDER BY b.bid_value
das ist nur in MySQL gültig...Jedes (in dieser Beziehung) vernünftige DBMS hätte dir das Statement vor die Füße geworfen, weil du eine nicht-gruppiert und nicht-aggregierte Spalte (b.bid_value) selektierst. Du gehst also gerade auf eine Menschenmenge zu, gruppierst die Menschen nach roten und grünen Pullovern und erwartest am Ende eine Aussage machen zu können, wer von denen eine Brille trägt...Merke: SELECT bei GROUP BY nur mit
MfG
Rouven