web-dev-qa-db-ja.com

MySQL DATE_ADDの使用、5日間隔

1回のクエリで5日間の注文合計($)と請求書数を選択しようとしています。しかし、これを実現することはできないようです。私が持っている現在のクエリはここにあります...

SELECT
    COUNT(id) as invoice_count,
    SUM(orderTotal) as orders_sum,
    UNIX_TIMESTAMP(created) as created
FROM ids_invoice
WHERE DATE_ADD(created, INTERVAL +1 DAY)
AND userId = 23 LIMIT 5'

DATE_ADDが私が探している正しい関数であるかどうかは完全にはわかりません。

現在、私は取得しています..。

Array ( 
    [0] => Array ( 
        [invoice_count] => 420
        [orders_total] => 97902.90
        [created] => 1252596560
    )
)

Array ( 
    [0] => Array ( 
        [invoice_count] => 68
        [orders_total] => 14193.20
        [created] => 1262900809
    )
)

もっと何かを手に入れたいのですが...

Array ( 
    [0] => Array ( 
        [invoice_count] => 18
        [orders_total] => 4902.90
        [date] => 04-19-2010
    )
)

Array ( 
    [0] => Array ( 
        [invoice_count] => 12
        [orders_total] => 5193.20
        [date] => 04-20-2010
    )
)

私はmysqlの日付関数にかなり慣れていないので、mysqlのドキュメントを読むときに必要な関数を見逃しただけかもしれません。

[〜#〜] update [〜#〜]クエリを更新しました...これでも、請求書があった日ごとに行がプルされません。 userId条件を満たす20日からの請求書がある場合、19日からの請求書のみをプルします。

SELECT
    COUNT(id) as invoice_count,
    SUM(orderTotal) as orders_sum,
    UNIX_TIMESTAMP(created) as created
FROM ids_invoice
WHERE
    created BETWEEN "2010-04-19 00:00:00" AND DATE_ADD("2010-04-19 00:00:00", INTERVAL +5 DAY) AND
    userId = 17
14
Webnet

日付スパン間のレコードを取得するには、次を使用します。

WHERE created BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 5 DAY)

この例では、今日から将来の数日間のレコード(時間を含む今日のレコードが存在すると仮定)を取得します。過去に行きたい場合は、DATE_SUBを見てください。

22
OMG Ponies

作成した列タイプがintの場合は、これを試してください

created<= UNIX_TIMESTAMP(DATE_ADD(CURDATE(),INTERVAL 5 DAY))')
2
afaaro
WHERE created <= NOW() AND created >=NOW() - INTERVAL 5 DAY

または、日時のDATE部分だけを比較することをお勧めします。

WHERE DATE(created) <= date(NOW()) AND 
  DATE(created) >= DATE(NOW() - INTERVAL 5 DAY)
0
a1ex07