Dynamiczne dopasowywanie wyniku zapytania

0

Opiszę sytuację na przykładzie:

Mam jedną tabelę w której zapisane mam ID klienta i jego odległość do każdego hotelu w kraju.
W drugiej tabeli posiadam ID hotelu, oraz ilość wolnych pokoi.

Potrzebuję się dowiedzieć w jaki sposób zwrócić wyniki w których uzyskam parę ID_klienta - ID_hotelu, dla których klient będzie miał do pokonania najkrótszą drogę.
Należy uwzględnić to, iż każdy hotel ma ograniczoną liczbę pokoi, dlatego klienci dla których braknie miejsc muszą być skierowani do innego możliwie najbliższego hotelu.
Każdy klient ma ten sam priorytet, więc kolejność przyznawania pokoi jest nieistotna.

0

Czyli masz 3 tabele, jedną z klientami, drugą z hotelami i trzecią z parą klient-hotel i do nich odległosć?

0

Tak.

0
SELECT clients.client_id, hotels.hotetel_id FROM clients, hotels, distances WHERE clients.client_id=distances.client_id AND hotels.hotel_id=distances.hotel_id AND clients.client_id=5 ORDER BY distances.distance_value DESC LIMIT 1
0

Właśnie cały problem polega na tym, że nie chcę tworzyć zapytania dla każdego klienta z osobna.
Chciałbym, aby pary ID_klienta - ID_hotelu zostały zwrócone w jednym wyniku dla wszystkich klientów.
No i Twoje zapytanie nijak nie uwzględnia, że w hotelu ubywa miejsc.

Ogólnie problem wydaje się dosyć złożony i zastanawiam się czy nie jest potrzebne skorzystanie z jakiś tabel tymczasowych czy czegoś podobnego.

0

Spróbuj tego, niemam ani danych, ani nie w mysql pisalem tylko w orcle, ale moze sie przyda

select clients.client_id, hotels.hotetel_id 
from   clients 
join   distances on clients.client_id = distances.client_id
                and distances.distance = (select min(distance)
                                          from distances 
                                          join hotels on hotels.hotel_id = distance.hotel_id
                                                     and clients.room <= hotels.room
                                           where clients.client_id = distances.client_id);

1 użytkowników online, w tym zalogowanych: 0, gości: 1