我一直在写MySQL查询很长一段时间,但我完全感觉像一个新手当谈到这一点,我似乎无法弄清楚如何简化这个查询。基本上我只是试图从我们的数据库中产生一个逗号分隔的收入清单,最终被插入谷歌图表。我必须为“过去31天”做一个,所以我有点拧,除非我想出如何简化这个。在我的表MySQL简化查询?
我的数据库列...
- 时间:当订单进来INT()(UNIX时间戳格式)
- 价格:订单多少是十进制( 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个小时为单位这样。
一如既往,任何帮助,非常感谢。谢谢!
SOLUTION
请注意:你的结果仔细一看,他们可能有,只是在错误的顺序,如果是这样,扭转你的排序。
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
首先我会尝试引入['DATE_ADD()'和'INTERVAL'(http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-添加)这是更可读。然后,我会在月份范围内尝试使用['GROUP_CONCAT()'](http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat)天数。 – mellamokb 2012-07-12 13:31:46
感谢您向我们展示您尝试过的内容,但如果您向我们展示了架构和所需的输出,则会更容易。 – 2012-07-12 13:32:02
@Marcus Adams,我解释了模式并说出我想要的输出是什么。我已经更清楚地为你格式化了它。只有2列。我想要的一个例子是:1.01,3,2,4.23 – PolishHurricane 2012-07-12 14:03:39