如何编写一个mysql查询,选择当天所有餐厅的所有订单?
有些餐厅可能会在24:00后关闭。
所以我有三张桌子:
restaurants
包含一些字段[id
,] orders
包含一些字段[id, resid, orderdate,
] hours
包含一些字段[id, resid, day, open, close
],day
是0-6之间的数字,开放和关闭时间是00:00:00
和23:59:59
之间的时间谢谢
这就是我需要的
SELECT b.*
FROM restaurants a, orders b, hours c
WHERE a.id=b.resid
AND a.id=c.resid
----这里我需要的代码将选择餐厅当前工作日的订单,但如果餐厅在24:00之后关闭,当前工作日可能包括上一个日历日的一些订单
答案 0 :(得分:0)
这是你想要的吗?
select o.*
from orders o
where o.orderdate = curdate();
如果没有,您可以修改您的问题以更好地解释您想要的内容吗?
答案 1 :(得分:0)
因为你没有提供太多信息,所以我在这里做了两个假设
假设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
表格上的过滤器,以获得您想要的正确数据。
希望这个帮助
答案 2 :(得分:0)
解决方案是
" SELECT b.*".
" FROM orders b, rests a, times c ".
" WHERE a.id=b.resid ".
" AND a.id=c.resid ".
" AND (".
"( c.day=dayofweek(subdate(current_date, 1))-1 " .
" AND c.close < c.open " .
" AND c.close> TIME(NOW())" .
" AND b.orderdate>= CONCAT(subdate(current_date, 1),' ',c.open) )" .
" OR " .
"( c.day=dayofweek(current_date)-1 " .
" AND c.close >= c.open " .
" AND c.close> TIME(NOW())" .
" AND b.orderdate>= CONCAT(current_date,' ',c.open) )" .
" OR " .
"( c.day=dayofweek(current_date)-1 " .
" AND c.close < c.open " .
" AND CONCAT(ADDDATE(CURRENT_DATE, 1),' ',c.close)> TIME(NOW())" .
" AND b.orderdate>= CONCAT(current_date,' ',c.open) )" .
")";