Myślę, że innym brakuje pytania... Uważają, że Twój stół może być już ZAPEŁNIONY przez wszystkie weekendy i pewien status, czy jest otwarty, czy nie... Domyślam się, że Twój stół MA rekord tylko JEŚLI jest zarezerwowany... dlatego musisz znaleźć rekordy, które W OGÓLE NIE ISTNIEJĄ... w oparciu o automatyczne wyszukiwanie dat...
To jest modyfikacja innego posta, który zrobiłem tutaj
Chociaż nie zmieniłem kontekstu zapytania, umieściłem tylko kolumny związane z TWOJĄ tabelą. Rozumiem, że grasz tylko przeciwko jednemu stolikowi, tak jak ja (właściwie). Jednak, aby zrozumieć alias „JustDates”, to WEWNĘTRZNE ZAPYTANIE WSTĘPNE tworzy dynamicznie zapełnianą tabelę WSZYSTKICH DATY, wykonując sprzężenie kartezjańskie z DOWOLNĄ inną tabelą.. w tym przypadku Twoja tabela rezerwacji „Miejsce” (nie zrobiłem tego t zobaczyć wprost odwołanie do nazwy tabeli, więc będziesz musiał to zmienić). Tak więc w istocie tworzy to tabelę wszystkich dat, zaczynając od tego, co jest „dzisiaj” i ciągnie się dalej przez 30 dni (przez limit), ale może być 40, 50, 300 lub tyle, ile potrzebujesz. ma co najmniej tyle rekordów, ile dni chcesz testować. (to samo wyjaśnienie w poście, z którego pochodzi). Ten zestaw wyników o wartości 30, 40 lub dowolnej liczbie dni jest wstępnie filtrowany TYLKO dla danego dnia tygodnia (1-niedziela lub 7-sobota...) Więc powinien zwrócić zestaw wyników zawierający tylko 23 kwietnia, 24 kwietnia, 30, 1 maja, 7 maja, 8 maja, 14 maja, 15 maja, 21 maja, 28 maja itd.
Więc TERAZ masz dynamicznie tworzony zestaw wyników dla wszystkich możliwych dni, które rozważasz posunięcie się naprzód. Teraz jest on dołączany do Twojej rzeczywistej tabeli rezerwacji miejsca i jest filtrowany tak, aby zwracał TYLKO te DATY, w których NIE znaleziono go dla lokalizacji id_venue, o którą się martwisz. W twoim przykładzie danych BYŁBY zgodny z 23 i 24 kwietnia i NIE zwróciłby tych rekordów. To samo z 30 kwietnia… Jednakże, okaże się, że rekord na liście prekwalifikacyjnej, która obejmuje 1 maja, NIE znajdzie daty meczu w tabeli miejsc, a tym samym uwzględni to, jak się spodziewasz… Następnie będzie nadal pomijać 7 i 8 maja, potem powrót 14, 15, 21, 28 maja itd...
select JustDates.OpenDate
from
( select
@r:= date_add( @r, interval 1 day ) OpenDate
from
( select @r := current_date() ) vars,
Venue
LIMIT 30 ) JustDates
where
DAYOFWEEK( JustDates.OpenDate ) IN ( 1, 7 )
AND JustDates.OpenDate NOT IN
( select Venue.date
from Venue
where Venue.id_venue = IDYouAreInterestedIn
and Venue.Date = JustDates.OpenDate )
order by
JustDates.OpenDate
Uwaga, i zgodnie z innymi publikacjami rezerwacji, zapytanie o terminy dostępności rezerwacji z limitem 30 powyżej może być DOWOLNĄ tabelą w systemie, o ile ma co najmniej tyle dni, ile chcesz oczekiwać na rezerwacje. . Jeśli chcesz mieć pełną dostępność w nadchodzącym roku, potrzebujesz 365 rekordów w tabeli używanych dla wyniku kartezjańskiego, aby uzyskać @r przechodzenie przez dynamicznie tworzone rekordy „daty”.