Beste,

Ik haal met deze query

$sql = "SELECT * FROM wv_biedingen WHERE `username` = '".$session->username."' GROUP BY auction, bid DESC";

deze gegevens op uit de DB:



Echter wil ik alleen het hoogste bod van deze gebruiker PER veiling laten zien. Ipv alle biedingen van deze gebruiker.

Een ideee?
SELECT MAX(bod) FROM veilingen GROUP BY veiling
Ik gebruik nu deze query

$sql = "SELECT *, MAX(bid) FROM wv_biedingen WHERE `username` = '".$session->username."' GROUP BY auction";

maar krijg dan de laagste biedingen ipv de hoogste?
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.
John,

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.
iets in deze trant:

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)

John,

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)
?>

John,

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)
?>

Bedankt!
En hier ga je nu zo verschikkelijk nat op een moment dat je het waarschijnlijk niet verwacht...

Test eens, wat gebeurt er als een gebruiker op twee verschillende veilingen hetzelfde bedrag biedt. Welke selecteer je dan?
@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??

Reageren