MySQL根据多个日期返回查询,如果不存在其他记录

时间:2012-10-10 19:30:05

标签: mysql

我正在创建一个php / mysql应用程序,我正在尝试根据用户提供的日期运行查询,然后使用这些结果返回查询,如果另一个日期不存在或匹配。

我想根据一些事情查询多个订单,例如:

  1. 用户提供日期。 MySQL使用提供的日期,并且仅当没有“订单”具有与该Customer_ID关联的更多当前日期时才返回行。因此,如果根据用户提供的日期没有新的订单,我只需要一个值。
  2. 以下是我一直在玩的内容:

    SELECT
    o.Customer_ID, o.ShippingCompanyName, cg.Category, cd.Category_ID, o.Order_ID,
    
    SUM(o.CustomerOrderTotal) as TOTAL,
    COUNT(o.Order_ID) as ORDERS,
    MAX(o.OrderPlaceServerTime) as LASTORDER
    
    FROM Orders o
    
    LEFT JOIN CustomerDetails cd ON o.Customer_ID = cd.Customer_ID
    LEFT JOIN _CustomerCategory cg ON cg.Category_ID = cd.Category_ID
    
    WHERE (
            o.OrderPlaceServerTime <= '".$BEFORE."'
        AND o.OrderPlaceServerTime NOT BETWEEN '".$BEFORE."' AND NOW()
          )
    
    AND o.IsVOID = 0
    AND o.IsPENDING = 0                     
    
    GROUP BY o.Customer_ID
    ORDER BY TOTAL DESC
    

    我没有得到我想要的结果。我向客户订单提供的订单也比用户提供的订单更新。

    此外,“日期”就像'2010-10-10 10:05:55'所以数据&amp;时间。

    我有点失落,所以我希望有人可以帮助我,或指出我正确的方向。

    感谢。

1 个答案:

答案 0 :(得分:0)

您在同一查询中混合了两件事。

每次WHERE表达式运行时,都会检查SINGLE行!他们不检查其他行。因此,当你检查日期时,你基本上说的是我小于5而且我不大于5.这是毫无意义的 - 你在第一个表达式中已经说过少于5个。

将WHERE更改为:

o.OrderPlaceServerTime <= '$BEFORE' AND
NOT EXISTS (SELECT * FROM Orders WHERE Orders = o.Customer_ID AND OrderPlaceServerTime > '$BEFORE')