因为你没有提供太多信息,所以我在这里做 2 个假设
假设 1:您在凌晨 1 点运行此查询,并希望从昨天到现在的凌晨 1 点获得所有订单假设 2:没有餐厅 24 小时营业
hours.day = WEEKDAY(SUBDATE(CURDATE(), 1)
如果 hours.close < hours.open 表示餐厅从 YESTERDAY + open_time 到 TODAY + close_time 开放,否则在 YESTERDAY 开放和关闭
STR_TO_DATE(CONCAT(DATE_FORMAT(SUBDATE(CURDATE(), CASE WHEN c.close < c.open THEN 1 ELSE 0 END), '%Y%m%d'), c.close), '%Y%m%d%T')
所以你的查询类似于
SELECT b.*
FROM restaurants a, orders b
WHERE a.id=b.resid
AND a.id in (
select c.resid
from hours c
where c.day = WEEKDAY(SUBDATE(CURDATE(), 1)
and STR_TO_DATE(CONCAT(DATE_FORMAT(SUBDATE(CURDATE(), 1), '%Y%m%d'), c.open), '%Y%m%d%T') > SUBDATE(CURDATE(), 1)
and STR_TO_DATE(CONCAT(DATE_FORMAT(SUBDATE(CURDATE(), CASE WHEN c.close < c.open THEN 1 ELSE 0 END), '%Y%m%d'), c.close), '%Y%m%d%T') <= CURDATE()
)
我不确定orders.orderdate
,因此您应该更新orders
表格上的过滤器以获取所需的正确数据。
希望这有帮助