查询当天所有餐厅的所有订单

时间:2013-09-01 14:42:13

标签: mysql

如何编写一个mysql查询,选择当天所有餐厅的所有订单?

有些餐厅可能会在24:00后关闭。

所以我有三张桌子:

  1. restaurants包含一些字段[id,]
  2. orders包含一些字段[id, resid, orderdate,]
  3. hours包含一些字段[id, resid, day, open, close],day是0-6之间的数字,开放和关闭时间是00:00:0023:59:59之间的时间
  4. 谢谢

    这就是我需要的

    SELECT b.*
    FROM restaurants a, orders b, hours c
    WHERE a.id=b.resid
    AND a.id=c.resid
    

    ----这里我需要的代码将选择餐厅当前工作日的订单,但如果餐厅在24:00之后关闭,当前工作日可能包括上一个日历日的一些订单

3 个答案:

答案 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) )" .
        ")";