tabela `list` czyli tabela główna z opisem aukcji, wystawcą, datą zakończenia itp.
tebela `bids` czyli tabela z poszczególnymi licytacjami (kwota, użytkownik).
Relacja jeden do wielu (jedna aukcja, 0-* licytacji).
SELECT * FROM `auctions_list` AS `fr` LEFT JOIN ( SELECT `auction_id`, `username`, COUNT(*) AS `bidsum`, MAX(`bid_value`) AS `maxbid` FROM `auctions_bids` WHERE `status` = 1 GROUP BY `auction_id` ) AS `fm` ON fr.id = fm.auction_id WHERE ORDER BY `date_end` DESC
Zapytanie kolejno bierze listę aukcji, następnie dołącza do niej na podstawie ID licytacje.
Bez problemu działa podsumowanie tj. maksymalny bid, liczba licytacji.
Potem oczywiście za WHERE jest troszkę więcej warunków ale nie chce zaciemniać.
Problem jest jak na razie jeden - `username` NIE zawiera nicku osoby, która wygrywa.
Bierze pierwszy lepszy nick z listy bidów dla danej aukcji.
Nie ma możliwości zastosowania ORDER BY, które jest blokowane przez grupowanie.
Gdy zaś nie ma grupowania to liczy sumę bidów i maksymalny bid globalnie, a nie dla danej aukcji.
Wynik ma mniej więcej wyglądać następująco:
Tytuł aukcji || Sprzedawca || Liczba ofert || Najwyższa oferta || Wygrywa (pogrubione = z tabeli bids)
Działa wszystko oprócz ostatniego, ogólnie zapytanie się strasznie rozrasta (dochodzą warunki dotyczące aukcji, bidów, sortowanie).
Zastanawiam się czy nie robię tego troszkę naokoło.
Nie ukrywam, że wynik ma być zbliżony od listy aukcji jak z Allegro (oprócz paginacji).