私は長い間MySQLクエリを書いてきましたが、これに関してはまったく初心者のように感じ、このクエリを単純化する方法がわからないようです。基本的に、私はデータベースから収益のコンマ区切りリストを生成しようとしています。これは最終的にGoogleチャートにプラグインされます。私も「過去31日間」のものを作らなければならないので、これを単純化する方法を理解しない限り、私はちょっと困惑しています。
テーブルのデータベース列は...
- 時間:注文がint()で届いたとき(UNIXタイムスタンプ形式)
- 価格:decimal(10,2)の注文はいくらでしたか
SELECT
CONCAT(
(SELECT SUM(price) FROM orders WHERE time < (UNIX_TIMESTAMP() - (6 * 86400)) AND time > (UNIX_TIMESTAMP() - (7 * 86400))),
',',
(SELECT SUM(price) FROM orders WHERE time < (UNIX_TIMESTAMP() - (5 * 86400)) AND time > (UNIX_TIMESTAMP() - (6 * 86400))),
',',
(SELECT SUM(price) FROM orders WHERE time < (UNIX_TIMESTAMP() - (4 * 86400)) AND time > (UNIX_TIMESTAMP() - (5 * 86400))),
',',
(SELECT SUM(price) FROM orders WHERE time < (UNIX_TIMESTAMP() - (3 * 86400)) AND time > (UNIX_TIMESTAMP() - (4 * 86400))),
',',
(SELECT SUM(price) FROM orders WHERE time < (UNIX_TIMESTAMP() - (2 * 86400)) AND time > (UNIX_TIMESTAMP() - (3 * 86400))),
',',
(SELECT SUM(price) FROM orders WHERE time < (UNIX_TIMESTAMP() - 86400) AND time > (UNIX_TIMESTAMP() - (2* 86400)) ),
',',
(SELECT SUM(price) FROM orders WHERE time > (UNIX_TIMESTAMP() - 86400))
) as chart_rev
FROM orders_basic
LIMIT 0,1
可能であれば、このように24時間単位で必要です。
いつものように、どんな助けでも大歓迎です。ありがとう!
解決
注意:結果を注意深く見てください。結果が間違った順序で表示されている可能性があります。その場合は、並べ替えを逆にしてください。
SELECT GROUP_CONCAT(total_sum) AS sum_list FROM
(
SELECT
FLOOR((UNIX_TIMESTAMP() - time) / 86400) AS date,
SUM(price) AS total_sum
FROM
orders_basic
WHERE
is_testorder < 1
AND FROM_UNIXTIME(time) > DATE_SUB(NOW(), INTERVAL 1 WEEK)
GROUP BY
date
) AS s