Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL基于两个时间戳列获取结果集_Php_Mysql - Fatal编程技术网

Php MySQL基于两个时间戳列获取结果集

Php MySQL基于两个时间戳列获取结果集,php,mysql,Php,Mysql,希望有人能帮我做这件事,真是目不转睛 我有一个表,其中存储用户选择的产品,并在该表中存储ordertime、PickeUp和PickeUpTime。所以structur是indexperimary INT,ordernrINT,ordertimeTIMESTAMP,productidINT,pickedupTINYINT,pickeduptimeTIMESTAMP 现在我想得到一个图表的结果集,也就是说,日期,订购产品的数量,以及按日期挑选、分组和订购的产品的数量。我现在的问题是,我得到的数字几

希望有人能帮我做这件事,真是目不转睛

我有一个表,其中存储用户选择的产品,并在该表中存储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图中应该不难。如果你觉得这很难,可以问一个新问题。