Php MySQL基于两个时间戳列获取结果集
希望有人能帮我做这件事,真是目不转睛 我有一个表,其中存储用户选择的产品,并在该表中存储ordertime、PickeUp和PickeUpTime。所以structur是indexperimary INT,ordernrINT,ordertimeTIMESTAMP,productidINT,pickedupTINYINT,pickeduptimeTIMESTAMP 现在我想得到一个图表的结果集,也就是说,日期,订购产品的数量,以及按日期挑选、分组和订购的产品的数量。我现在的问题是,我得到的数字几乎是正确的,但挑选的数字被计入了订单中,我似乎无法理解这一点Php MySQL基于两个时间戳列获取结果集,php,mysql,Php,Mysql,希望有人能帮我做这件事,真是目不转睛 我有一个表,其中存储用户选择的产品,并在该表中存储ordertime、PickeUp和PickeUpTime。所以structur是indexperimary INT,ordernrINT,ordertimeTIMESTAMP,productidINT,pickedupTINYINT,pickeduptimeTIMESTAMP 现在我想得到一个图表的结果集,也就是说,日期,订购产品的数量,以及按日期挑选、分组和订购的产品的数量。我现在的问题是,我得到的数字几
SELECT (case when pickedup = '1' then DATE(order_detail.pickeduptime) else DATE(order_detail.ordertime) end) AS x,COUNT(productid) AS y,SUM(case when pickedup = '1' then 1 else 0 end) AS z FROM order_detail WHERE productid = '127' AND YEAR(`ordertime`) = YEAR(NOW()) GROUP BY x ORDER BY x asc
任何帮助都是非常感激的-
更新:
1 index int(11) AUTO_INCREMENT Primary
2 ordernr int(11)
3 productid int(11)
4 price int(11)
5 ordertime timestamp CURRENT_TIMESTAMP
6 pickedup tinyint(4) 0
7 pickeduptime timestamp 0000-00-00 00:00:00
表的外观。不确定您的问题到底是什么,但我认为您有一个语法错误:忘记在结尾后放一个大小写,如中,第一件可能有帮助的事情是SQL的正确格式:
SELECT
(CASE
WHEN pickedup = '1' THEN DATE(pickeduptime)
ELSE DATE(ordertime)
END) AS x,
COUNT(productid) AS y,
SUM(CASE
WHEN pickedup = '1' THEN 1
ELSE 0
END) AS z
FROM
order_detail
WHERE
productid = '127' AND
YEAR(ordertime) = YEAR(NOW())
GROUP BY x
ORDER BY x ASC
现在我需要知道你想做什么。真正的问题就从这里开始。目前尚不清楚是否将表中的行重新用于取货。对不起,我帮不了你。不过你很奇怪。对于像这样简单的东西,您不需要使用两个CASE命令
我也无法理解您的SQL,按来自两列的日期分组
仔细阅读之后,我想我开始明白你想要什么了。您想查看每个日期订购和提货的产品数量。我不会尝试使用一个SQL命令来实现这一点,而是使用两个SQL命令。两行,两个SQL命令:-
首先是一个简单的问题:按日期订购、分组和排序的产品数量:
SELECT
DATE(ordertime) as orderdate,
COUNT(productid) AS quantity
FROM
order_detail
WHERE
productid = '127' AND
YEAR(ordertime) = YEAR(NOW())
GROUP BY orderdate
ORDER BY orderdate ASC
现在,尚未提货的订购产品:
SELECT
DATE(ordertime) as orderdate,
COUNT(productid) AS quantity
FROM
order_detail
WHERE
productid = '127' AND
YEAR(ordertime) = YEAR(NOW()) AND
pickedup != '1'
GROUP BY orderdate
ORDER BY orderdate ASC
现在已提货的产品仍按订单日期排序:
SELECT
DATE(ordertime) as orderdate,
COUNT(productid) AS quantity
FROM
order_detail
WHERE
productid = '127' AND
YEAR(ordertime) = YEAR(NOW()) AND
pickedup = '1'
GROUP BY orderdate
ORDER BY orderdate ASC
以下是在收货日期排序的相同内容:
SELECT
DATE(pickeduptime) as pickedupdate,
COUNT(productid) AS quantity
FROM
order_detail
WHERE
productid = '127' AND
YEAR(ordertime) = YEAR(NOW()) AND
pickedup = '1'
GROUP BY pickedupdate
ORDER BY pickedupdate ASC
现在,您可以使用其中任何一个在图形中绘制一条线
如果您坚持一个查询,您可以使用以下查询:
SELECT
DATE(ordertime) as orderdate,
SUM(pickedup) AS pickedup_quantity,
SUM(1-pickedup) AS not_pickedup_quantity
FROM
order_detail
WHERE
productid = '127' AND
YEAR(ordertime) = YEAR(NOW())
GROUP BY orderdate
ORDER BY orderdate ASC
请注意,所有内容都必须按一个日期排序。我的问题是,我得到了一个列表,但它是不正确的,pickedup被计入y变量,但它应该是这样的:日期、此日期的产品订单数量、此日期的产品pickedup数量。请显示您的表、列的含义,并告诉我们你想做什么样的图表。谢谢你的回复。我很抱歉,但是我的mysql高级技能是缺乏的,这正是我从中得到的,我知道这不是超好的。我对每个订购的产品使用一行,并在客户从商店取货时更新PickeUp值和PickeUpTime。啊,我明白了,现在我明白了这是怎么回事。你能解释一下你想在图表中显示什么吗?我需要知道您希望如何在图形中表示订购和挑选的产品。混合但按日期订购?这对我来说没有什么意义。我使用Morris.js,想要一个以日期为x轴、y轴为2行的图表,当天订购的产品数量和当天挑选的产品数量。到目前为止非常感谢,但我真的希望它可以在一个查询中完成,这样就可以很容易地直接放到图中。对于2个查询,我必须找到一种方法来合并它们,并将它们输入到图表中,这样它们的结果就像;[{0:2014-10-04,x:2014-10-04,1:210,y:210,2:16,z:16}]等等。我认为一个查询是不可能的,即使是,也会非常难看。在这种情况下,请使用两个查询,这是逻辑解决方案。在此之后,将两个SQL结果合并到一个javascript图中应该不难。如果你觉得这很难,可以问一个新问题。