Mam 2 tabele, restauracje i zamówienia, tabele zamówień mają restaurant_id
, status
i date
pól, każdy dzień jest oddzielną linią w tabeli zamówień.lewy dołączyć z co najmniej jednym wierszem z warunkiem od prawej mysql
Muszę odfiltrowywać restauracje i pokazywać tylko restauracje, które mają co najmniej jedną rezerwację w pewnym zakresie dat, ale muszę pokazać ją w kalendarzu, powinna ona wyglądać jak lista restauracji z informacjami.
czymś jak to
So, oznacza to, że jeśli at least one day with reserved status
warunek jest spełniony w tym przedziale czasowym, wszystkie zamówienia dla tego zakresu dat dla tej restauracji powinny być pobierane również.
nie mogę zrobić zwykły sprzężenia wewnętrznego,
SELECT r.`id`, r.`name`, o.`date`, o.`status`
FROM restaurants r
INNER JOIN orders o ON r.id = o.restaurant_id AND o.date BETWEEN '2013-08-10' AND '2013-08-31'
AND status = 'reserved'
, ponieważ w tym przypadku, na przykład, nie będę miał informacji o zamówieniu na 31 sierpnia, na restaurant2, bo choć jest w data wściekłości od 10 do 31, ale jego status jest "zamknięty". Tak, myślę, aby lewy przyłączyć się ten
SELECT r.`id`, r.`name`, o.`date`, o.`status`, o.`id` order_id
FROM restaurants r
LEFT JOIN orders o ON r.id = o.restaurant_id AND
o.date BETWEEN '2013-08-10' AND '2013-08-31'
WHERE o.`id` IS NOT NULL
Ale muszę też dodać jeden warunek, aby upewnić się, że istnieje co najmniej jeden wiersz o statusie zlecenia = „zarezerwowana”, starałem się dodać gdzie klauzula taka jak COUNT(o.status = 1) > 0
, ale powoduje błąd.
THanks
Użyj podkwerenda uzyskać restauants z co najmniej jednego rekordu, gdzie stan jest zarezerwowanym Wtedy y. możesz użyć wewnętrznego sprzężenia. –
@DanBracuk Czy możesz trochę o tym powiedzieć? Dzięki – dav