Omdat de data die je terug krijgt simpelweg niet is wat je verwacht. Strict genomen weet je helemaal niet meer of de data die je terug krijgt nog wel klopt, zeker niet als je er vanuit gaat maar 1 waarde te krijgen en dus zelfs niet eens meer controleert of je eerste record wel het enige is. Dan kan het dus zijn dat je opeens gegevens toont van zelfs een heel andere veiling!
De vraag is overigens een heel standaard vraag, met een heel standaard oplossing. Als je even zoekt vind je honderden voorbeelden. Waar het op neer komt is dat je een subquery bouwt met de indices van de veilingen en de max waarde. Vervolgens join je die met de oorspronkelijke tabel op zowel veiling index als hoogste waarde. Op die join selecteer je alleen de juiste veiling en je zit direct goed. Alleen als er op die bewuste veiling meerdere biedingen zouden zijn met dezelfde waarde krijg je meerdere rijen terug, alleen is dat onmogelijk, want dan zou de veiling nog doorgaan en heb je dus nog niet het hoogste bod.
SELECT a.auction, a.username, b.bid, a.datetime
FROM wv_biedingen a
LEFT JOIN (
SELECT auction, MAX(bid) AS bid
FROM wv_biedingen
GROUP BY auction
) b ON (a.auction = b.auction AND a.bid = b.bid)
WHERE a.auction = 1;
Dat zal nog wel meevallen, maar dit wordt bij grote aantallen records verschrikkelijk traag vanwege de dependend subquery, en is dus beter om te schrijven naar een join.
En als ik het goed lees wil TS het hoogste bod van een gebruiker op alle veilingen, en daarnaast ook weten of het al dan niet het hoogste bod van een veiling is.
Zo even uit mijn hoofd krijg je dan dit:
SELECT
auction,
username,
datetime,
u_maxbid,
IF(u_maxbid=v_maxbid, 'hoogste', 'verloren') status
FROM
(SELECT
a.auction,
a.username,
a.datetime,
MAX(a.bid) u_maxbid,
b.v-maxbid
FROM
wv_biedingen a
INNER JOIN
(SELECT
auction,
MAX(bid) v_maxbid
FROM
wv_biedingen
GROUP BY
auction) b
ON
a.auction = b.auction
WHERE
a.username = 'anuser'
GROUP BY
a.auction,
a.username,
a.datetime,
b.v_maxbid
HAVING
a.bid = u_maxbid
) c
[size=xsmall]Toevoeging op 27/11/2012 11:43:33:[/size]
Had bovenstaande reactie van Erwin nog niet gezien