Semplicemente, tu vuoi fare in una sola query due aggregazioni diverse: questo è semplicemente impossibile.
Mi sorge però spontaneo un quesito: ma non è che per caso entrambe le tue richieste riguardano gli oggetti su cui A ha fatto almeno un'offerta?
Se così fosse dovresti prima di tutto trovare questi oggetti, usarli come filtro sulle offerte e quindi trovare l'offerta massima per ciascuno di essi.
Dopodichè, quando leggi i dati restituiti da questa query, non è difficile inserire in un array i nomi degli oggetti, evitando di inserirli se doppi; questo array sarà la lista dei nomi degli oggetti su cui A ha fatto un'offerta.
Per capirci:
select distinct idoggetto from offerte where idutente=a
Sono tutti gli oggetti su cui A ha fatto un'offerta.
select * from offerte where idoggetto in (select distinct idoggetto from offerte where idutente=a)
Sono tutte le offerte per oggetti su cui A ha fatto almeno un'offerta.
select max(prezzo), idoggetto from (select * from offerte where idoggetto in (select distinct idoggetto from offerte where idutente=a)) AS offerte GROUP BY idoggetto
Sono i prezzi massimi offerti per gli oggetti su cui A ha fatto un'offerta.
select max(prezzo), idoggetto, oggetti.nome from (select * from offerte where idoggetto in (select distinct idoggetto from offerte where idutente=a)) AS offerte left JOIN oggetti on idoggetto=oggetti.id GROUP BY idoggetto
Aggiunge una join per leggere dalla tabella oggetti il nome dell'oggetto, così da poter usare la tecnica dell'array di nomi oggetti che ti indicavo sopra.
Ciao!

Rispondi quotando