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

同じクエリに 2 つのものが混在しています。

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 に答える