0

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

我有多个订单要根据一些事情进行查询,例如:

  1. 用户提供日期。MySQL 使用提供的日期并仅在没有与该 Customer_ID 关联的更当前日期的“订单”时才返回行。因此,如果根据用户提供的日期没有新订单,我只想要一个值。

这是我一直在玩的:

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' 和数据和时间一样。

我有点迷茫,所以我希望有人可以在这里帮助我或指出我正确的方向。

谢谢。

4

1 回答 1

0

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

每次 WHERE 表达式运行时,它们都会检查单行!他们不检查其他行。因此,当您检查日期时,您基本上是在说 WHERE i 小于 5 并且 i 不大于 5。这是没有意义的 - 您在第一个表达式中已经说过小于 5。

将 WHERE 更改为:

o.OrderPlaceServerTime <= '$BEFORE' AND
NOT EXISTS (SELECT * FROM Orders WHERE Orders = o.Customer_ID AND OrderPlaceServerTime > '$BEFORE')
于 2012-10-10T19:40:16.667 回答