У меня есть эти таблицы:
- машины (id)
- продукты (id, имя)
- machine_products (id, machine_id [FK], product_id [FK], цена)
- machine_product_restrictions (id, machine_product_id [FK], день, begin_hour, end_hour)
Пояснения:
- Для 1 'машины'У меня есть N' machine_product '
- Для 1' продукта 'У меня есть N' machine_product '
- Для 1' машины 'и 1' продукта 'У меня есть 1' machine_product '
- Для 1 'machine_product' у меня есть N 'machine_product_restriction'
- Один 'machine_product_restriction' принадлежит 1 'machine_product'
- Может быть N 'machine_product_restrictions' для 1 'machine_product' с тем же днем идругой диапазон времени.
Что я хочу запросить
Просто я хочу, чтобы уникальные продукты конкретной машины (machine_id = 1) были доступны СЕЙЧАС (на этот деньнедели [1-понедельник, 7-воскресенье] и для этого времени / часа [ЧЧ: мм - 24ч]) с именем и ценой.
То, что я пробовал
SELECT P.id, P.name, MP.price FROM products P
JOIN machine_products MP on MP.product_id = P.id
LEFT JOIN machine_product_restrictions R on MP.id = R.machine_product_id
WHERE MP.machine_id = 1
AND
(
R.machine_product_id IS NULL
OR
(
R.machine_product_id IS NOT NULL
&&
(R.DAY = DAYOFWEEK(NOW()) -1)
&&
(TIME(NOW()) NOT BETWEEN TIME(R.begin_hour) AND TIME(R.end_hour))
)
)
Это не работает вообще, потому что возвращает мне повторяющиеся продукты, так как 'machine_product_restrictions' выходит за пределы диапазона времени.
Спасибо.