Проблема с MySQL запросом с днями и временным диапазоном - PullRequest
0 голосов
/ 24 октября 2018

У меня есть эти таблицы:

  • машины (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' выходит за пределы диапазона времени.

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...