Sa dwie tabele...

HOTEL - zawiera m.in hotel_id i inne...

OFERTA ( czyt. termin ) - zawiera m.in hotel_id, cene, date_wylotu i inne..

Cel to wyciagniecie 10 hoteli z najnizszymi cenami, a dalej w kolejnosci najblizszy termin. Przy czym nalezy w koncowym wyniku zwrocic danej wybranej oferty i hotelu.

Doszlismy ze znajomym do takiego zapytania...

  1. SELECT offer.*
  2. FROM hotel INNER JOIN offer ON (hotel.hotel_id = offer.hotel_id), (SELECT h.hotel_id, MIN(o.price) AS minprice
  3. FROM hotel h INNER JOIN offer o ON h.hotel_id = o.hotel_id GROUP BY h.hotel_id LIMIT 10 ) AS hp WHERE offer.hotel_id = hp.hotel_id AND offer.price = hp.minprice ORDER BY offer.price, offer.date_from;


Ma ono jednak wady, gdyz jesli hotel zawiera kilka offert ( czyt. terminow ) z ta sama cena to zwroci wszystkie... czyli nalezaloby jeszcze zrobic kolejny select zagniezdzony, ktory grupowalby wg daty wyjazdu ( min dacie wyjazdu ).

Czy ma ktos jakis lepszy pomysl jak poradzic sobie z tym zadaniem?