select * is fout in relatie met GROUP BY en helaas maakt MySQL ook fouten met GROUP BY: MySQL geeft geen foutmeldingen bij onjuiste GROUP BY configuratie. Probeer eerst eens:
$sql = "SELECT auction, MAX(bid) FROM wv_biedingen WHERE `username` = '".$session->username."' GROUP BY auction";
De velden uit de GROUP BY clause moeten corresponderen met de geselecteerde velden die niet gesommeerd, gecumuleerd e.d. worden in de select clause. Een goed database engine zal dat ook als fout melden maar MySQL niet.
Bedankt voor je bericht. Ik heb de query er in gezet zoals jij hem aangaf. Echter nu de vraag, hoe haal ik de andere velden als ID, bid en datetime nu op?
Pas dan kan ik ook echt checken of dit de hoogste biedingen zijn.
SELECT a.username, a.auction, a.MAX_BID, b.username, b.veiling, b.datum, b.status
FROM (SELECT username, auction, MAX(bid) AS MAX_BID
FROM wv_biedingen
WHERE username = '".$session->username."'
GROUP BY auction, username") a,
(SELECT username, veiling, datum, status
FROM wv_biedingen
WHERE bid = (SELECT MAX(bid)
FROM biedingen
WHERE username = '".$session->username."') ) b
WHERE a.username=b.username
;
[size=xsmall]Toevoeging op 26/11/2012 22:08:53:[/size]
Of iets vereenvoudigd:
SELECT a.veiling, a.bod, a.status, a.bid, a.username
FROM wv_biedingen a
WHERE username = '".$session->username."'
AND bid = (SELECT auction, MAX(bid)
FROM biedingen b
WHERE a.auction=b.auction
AND a.username = b.username)
Heel erg bedankt, maar ik krijg dit nog niet werkende. Ik heb de query wat aangepast, maar het resultaat blijft leeg.
Even wat correcte info:
- De tabel heet wv_veilingen
- De rijen die ik wil uitlezen zijn id, auction, username, bid, datetime
Waarbij ik dan wil laten zien de MAX (bid) per auction
Dit is de laatste die ik geprobeerd heb:
<?
SELECT a.auction, a.username, a.bid, a.datetime
FROM wv_biedingen a
WHERE username = '".$session->username."'
AND bid = (SELECT username, auction, MAX(bid)
FROM wv_biedingen b
WHERE a.auction=b.auction
AND a.username=b.username)
?>
Er moet nog een group by in de subquery en probeer de query eerst eens in phpadmin zonder de username=
<?
SELECT a.auction, a.username, a.bid, a.datetime
FROM wv_biedingen a
WHERE bid = (SELECT auction, MAX(bid)
FROM wv_biedingen b
WHERE a.auction=b.auction
AND a.username=b.username
GROUP BY auction)
?>
Ik heb het gevonden. Testen in phpmyadmin was een goed idee!
Ik kreeg deze foutmelding: #1241 - Operand should contain 1 column(s)
De fout betekend dat je een operatie wilt doen die 1 argument nodig heeft, maar dat je er meerdere geeft.
In de 2e SELECT dus de auction eruit en het werkte.
<?
SELECT a.auction, a.username, a.bid, a.datetime
FROM wv_biedingen a
WHERE username = '".$session->username."'
AND bid = (SELECT MAX(bid)
FROM wv_biedingen b
WHERE a.auction=b.auction
AND a.username=b.username
GROUP BY auction)
?>
@Erwin, dat levert dan toch gewoon twee records op in het lijstje (twee verschillende auctions).
Leg eens wat meer uit dan alleen: ga je nu zo verschikkelijk nat??