Datenbankabfrage MySQL höchsten Wert aus Spalte

Stehe momentan auf dem Schlauch und weiß leider wie du es meinst. Sorry

Wenn ich das nun ausführe:
SQL:
SELECT 
	u.user_id, 
	u.auktionshaus_id, 
	b.domain,
	MAX(u.preis) AS user_max_gebot,
	COUNT(u.preis) AS gebote
FROM 
	auktionshaus_gebote u, 
	auktionshaus_gebote alle,
	auktionshaus b
WHERE 
	u.user_id = '44' 
GROUP BY 
	u.auktionshaus_id 
HAVING MAX(u.preis) = MAX(alle.preis)

Bekomme ich bei Gebote 36.
Es sind aber nur 3.

Ah ich habe es wohl hinbekommen:
SQL:
SELECT 
	u.user_id, 
	u.auktionshaus_id, 
	b.domain,
	MAX(u.preis) AS user_max_gebot,
    (SELECT count(*) FROM auktionshaus_gebote WHERE auktionshaus_id=u.auktionshaus_id) AS gebote
FROM 
	auktionshaus_gebote u, 
	auktionshaus_gebote alle,
	auktionshaus b

WHERE 
	u.user_id = '44' 
GROUP BY 
	u.auktionshaus_id 
HAVING MAX(u.preis) = MAX(alle.preis)

@holzmensch habe gerade bei deiner Variante festgestellt, das ich immer nur eine Auktion auslesen kann und zwar die mit dem höchste Gebot. Und ich denke mal das dass mit MAX(alle.preis) so ist.
 
Ja, wolltest doch die Gebote eines Users haben, wo der User der Höchstbietender ist. COUNT würde auch ohne den innerselect klappen, wenn du alle.gebote zählst und nicht user.gebote!
 
Ja, ich wollte gerne die Gebote aller Auktionen, wo der User der Höchstbietende ist, anzeigen lassen. Bei deiner Variante funktioniert das halt nicht. Es werden alle Auktionen zusammen gemischt und nur das Höchste Gebot rausgepickt.

Hallo,

so scheint es am besten zu funktionieren:
PHP:
$sql="SELECT
        max_per_au.auktionshaus_id,
        max_per_au.au_max AS gebot,
        max_per_au.gebote AS gebote,
        die_auktion.domain AS domain,
        die_auktion.datum_ende AS datum_ende
    FROM
        (
            SELECT
                auktionshaus_id,
                MAX(preis) AS au_max,
                COUNT(*) AS gebote
            FROM
                auktionshaus_gebote
            GROUP BY
                auktionshaus_id
        ) AS max_per_au
        INNER JOIN (
            SELECT
                auktionshaus_id,
                MAX(preis) AS my_max
            FROM
                auktionshaus_gebote
            WHERE
                user_id = '".$userinfo['id']."'
            GROUP BY
                auktionshaus_id
        ) AS max_for_me
            ON max_per_au.auktionshaus_id = max_for_me.auktionshaus_id
            AND max_per_au.au_max = max_for_me.my_max
        INNER JOIN (
            SELECT 
                id,
                domain,
                datum_ende
            FROM 
                auktionshaus
        ) AS die_auktion 
        ON max_per_au.auktionshaus_id = die_auktion.id";
 
klar funktioniert das, COUNT(alle.preis) as anzahl, aber mach wie du willst.
Das 30 zeilige SQLStatement ist um einiges einladender und wartbarer! ;-)
 
Zuletzt bearbeitet:
Zurück