我正在创建一个php / mysql应用程序,我正在尝试根据用户提供的日期运行查询,然后使用这些结果返回查询,如果另一个日期不存在或匹配。
我想根据一些事情查询多个订单,例如:
以下是我一直在玩的内容:
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;时间。
我有点失落,所以我希望有人可以帮助我,或指出我正确的方向。
感谢。
答案 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')